Rafał Wrzeszcz - Wrzasq.pl

Przegląd frameworków JavaScript: jQuery

Thursday, 11 June 2009, 15:33

jQuery

Muszę przyznać, że dojo wywarło na mnie bardzo pozytywne wrażenie, mimo kilku mankamentów dotyczących raczej mojego subiektywnego podejścia i metod tworzenia aplikacji. Następny postanowiłem wypróbować jQuery. Ten framework cieszy się dużą popularnością i bardzo szybko zdobywa sobie uznanie w sieci. Powiem szczerze, że opinie, jakie o nim czytałem w większości niemal spowodowały, że w ciemno wybrałbym ten framework - od razu powiem, że całe szczęście, że postanowiłem to wszystko przejść na własnej skórze. Ta biblioteka rozczarowała mnie i to mocno. Zupełnie nie rozumiem fascynacji nią w środowisku deweloperów. Jedyną jej zaletą jest to, że pozwala stworzyć tasiemca w jednej linijce, który coś zrobi.

Integracja z kodem

W tym aspekcie akurat nie ma co zarzucić jQuery - wszystko odbywa się bezproblemowo, a w kod strony, poza załączeniem pliku biblioteki, nie trzeba w ogóle ingerować. Jednak brakuje mi w tutaj jakiegoś odpowiednika dojo.require(), przynajmniej dla dodatkowych plików (samo jQuery zamyka się w jednym pliku). Problematyczne może za to być korzystanie z biblioteki. Podstawą całego frameworka jest magiczna funkcja $. Jest ona tylko aliasem do bezpiecznej nazwy jQuery i na dodatek istnieją mechanizmy pozwalające jQuery uwolnić ten alias, ale nie mniej jakoś w przypadku jQuery uważam, że jest to nadużywane. Praktycznie wszystko wykonuje się tutaj za pomocą dolara. Jest on wręcz traktowany tutaj jako przestrzeń nazw:

// no to jest moim zdaniem przesada
$.get("test.php");

O niedociągnięciach jQuery można przeczytać tutaj.

Praca z drzewem DOM

I tutaj zaczyna się droga przez mękę. Na prawdę nie rozumiem, co ludzie widzą takiego w łańcuchowaniu dziesięciu wywołań magicznego dolarka. Do jQuery mam kilka zarzutów. Po pierwsze kod jest nieczytelny: mówcie co chcecie, może wygląda ładnie, ale nie czytelnie - nie widać co właściwie się dzieje, operujemy tak samo na pojedynczych elementach jak i na listach. Wśród wielu programistów istnieje dziwne przekonanie, że jeśli czegoś nie widać, to nie warto się tym przejmować. I za to mam wrażenie cenione jest jQuery. Co się na przykład stanie, jeśli stworzymy sobie funkcję polegającą na jQuery i nie będziemy wiedzieli, czy dostajemy jeden element, czy listę? Dodamy do obiektu jQuery treść z przypisanymi zmiennymi i co - dla listy będą one sklonowane? Moim zdaniem idea jQuery jest przestrzelona. Ułatwia ona wiele rzeczy, ale zbytnio - keep things as simple as possible, but not simpler.

Inną sprawą jest, że jQuery nie obejmuje swoją funkcjonalnością całego spektrum operacji na drzewie, tak jak to robi dojo. Na przykład tworzenie elementów (odpowiednik dojo.create()), odbywa się przez utworzenie po prostu fragmentu HTML:

var element = $("<div />");

Moim zdaniem ani to łatwe (po cholerę dopisywać nawiasy trójkątne, jeśli na przykład mam nazwę elementu w zmiennej), ani czytelne (według dokumentacji jQuery, w takim wypadku wywoływane jest proste document.createElement(), zamiast przetwarzania innerHTML, ale skąd mam to widzieć? Po raz kolejny potwierdza się to, co przedstawiałem w akapicie powyżej.

Niemniej ograniczając się do samego opisu funkcjonalności, to niewątpliwie jQuery jest tutaj bardzo elastyczne - możemy korzystać oczywiście z selektorów i przechodzić przez drzewo w przeróżny sposób.

Obsługa zdarzeń

Na tym polu akurat jQuery nie można nic zarzucić. Sama obsługa zdarzeń jest bardzo wygodna, a do podstawowych zdarzeń dostępne są helpery. Do funkcji obsługi zdarzeń przekazywane są, podobnie jak w pozostałych frameworkach, obiekty zdarzeń:

$("a.offline").click( function(event) {
    alert("Link nie działa.");
    event.preventDefault();
} );

XHR/AJAX

Niewątpliwie jQuery ma na celu uproszczenie wszystkiego do granic możliwości. Tak było w przypadku pracy z dokumentem i tak samo jest z obsługą zapytań HTTP. Niemniej w tym wypadku nie ma tutaj czego zbytnio bibliotece zarzucić - wszystkie podstawowe i bardziej zaawansowane czynności wykonamy bez trudu, a wszystko co tylko można zautomatyzować biblioteka zrobi za nas:

$.post("/ajax.php", {
    action: "ManageMasks",
    page: masksTable.pagination.page,
    by: masksTable.by,
    order: masksTable.order
}, function(data) {
    masksTable.update(data.MasksList.data);
}, "json");

Brakuje jednak funkcjonalności, jaką daje na przykład dojo - automatyczne pobieranie danych z formularza. Tutaj musimy ręcznie wywołać serialize().

Widgety i dodatki

Oprócz podstawowej funkcjonalności, podobnie jak w przypadku dojo, mamy do dyspozycji kilka domyślnych łidżetów oraz efektów. Jednak w porównaniu z bogatym wyposażeniem dijit, w jQuery jest ich na prawdę tylko kilka. Niemniej ich używanie jest dużo prostsze niż w przypadku kontrolek dojo i jeśli nie tworzymy kosmicznych interfejsów graficznych mających imitować kontrolę lotów wahadłowców, to z pewnością szybko wykonamy swoją pracę korzystając z biblioteki jQuery.

Moja opinia

Na pewno jQuery to dobra biblioteka. Ale nie rozumiem czemu używać tylko dobrej, skoro pozostałe są dużo lepsze. Kod tworzony pod jQuery jest nieczytelny i niezbyt wygodny w utrzymywaniu. Jeśli ktoś potrzebuje wydajnej, i rozbudowanej biblioteki to o wiele lepszym wyborem jest dojo, które prezentuje solidne wykonanie i przejrzystą myśl techniczną. Kompletnie nie rozumiem swoistego szału na punkcie jQuery w sieci - ta biblioteka nie zasługuje na aż tyle uwagi ile się jej poświęca. Ja się rozczarowałem.

Prototype

Tags: Web, Teksty, JavaScript, AJAX, DOM