Logo

Blog o JavaScript, jQuery, HTML5, CSS3 i 4. Porady jak pisać dobrej jakości kod, tutoriale, nowości.

GWT z punktu widzenia front-endu

Dzisiaj opiszę Wam moje spostrzeżenia na temat tego Googlowego narzędzia do tworzenia webowych aplikacji biznesowych (JAVA). Jako, że już pół roku w tym siedzę w jednym projekcie, to mam już wyrobioną opinię o tym.

Jak trafiłem do tego projektu?

To było proste. GWT kompiluje cały kod aplikacji do JS, a że znam JS to idealnie się nadaję do tego projektu :).

Czym jest GWT?

Google Web Toolkit (GWT) to framework do tworzenia dużych, webowych aplikacji biznesowych. Zaletą tego narzędzia jest to, że "nie trzeba być ekspertem od przeglądarek, XMLHttpRequest i JS". Cały ten framework jest stworzony jako swego rodzaju pomoc dla programistów JAVA, którzy nie muszą się bawić w webmastera. GWT oferuję dużą liczbę widgetów gotowych do użycia (wystarczy przypisać dane i akcje) np. rozwijane menu, dynamiczne tabele czy AJAX. Z punktu widzenia JAVY - cud, miód i orzeszki. Do czasu :).

Na GWT jest oparta najnowsza wersja AdWords.

Widgety

Jeśli chodzi o widgety, to jest ich dużo i zostały stworzone tylko te najczęściej wykorzystywane na stronach. Oprócz wspomnianianych wcześniej są też:

Całą dostępną galerię widgetów znajdzie tutaj.

Zaletą tych komponentów jest to, że działają poprawnie pod wszystkimi przeglądarkami. Prawie :).

Można oczywiście korzystać np. z jQuery, ale to będzie przerost formy nad treścią.

Pozorna kompatybilność ze wszystkimi przeglądarkami

Największą wadą GWT jest to, że jeżeli chcemy opakować naszą aplikację w inny design, niż ten dostarczony przez GWT, to zaczyna się ostra jazda bez trzymanki. I nie piszę tego złośliwie. Taka jest prawda. Wszystkie te komponenty są tworzone na tabelkach, które są opakowane w kontenery z pozycjami absolutnymi i relatywnymi. Aby było jeszcze fajniej, to wysokości i szerokości są generowane dynamicznie, co czasem robi się mega problematyczne. I weź się człowieku ogarnij w tym :).

JavaScript

Jak wspomniałem na początku, cała nasza aplikacja jest kompilowana do jednego pliku javascript. Jeżeli nie jest to coś skomplikowanego, to pliczek waży około 12Kb. Jeżeli to bardziej skomplikowany twór to może ważyć dużo więcej, nawet pół mega!

Inny problem który napotkałem, to IE. Niektóre rzeczy po prostu nie działają tak jak trzeba pod IE. Tutaj kompilator GWT nie daje rady. Kod JS rzuca błędami.

Wspomniałem, że w GWT (czyli w języki JAVA) można pisać czysty JS? :)

Ano można. Są jednak pewne ograniczenia. Aby napisać kawałek czystego kodu to w dowolnej klasie wystarczy zdefiniować natywną metodę:

native void showLoadingBox(Boolean hide) /*-{
   // Ciało metody.
   // Ale...
   var el = $wnd.document.getElementById("element");
}-*/

Są tutaj dwie rzeczy na które trzeba zwrócić uwagę:

$wnd i $doc

Te dwie zmienne są dość kluczowe jeśli chodzi o pisanie funkcji JS. $wnd i $doc to nic innego jak window i document. Wszystko to przez fakt, że cała aplikacja ładuje się w iframe.

DOM

Bardzo fajnie rozwiązany jest DOM. GWT posiada specjalny obiekt o nazwie DOM za pomocą którego można poruszać się po całej strukturze dokumentu.

Ma on jednak jedną wadę. Nie wiedzieć czemu, nie wszystkie "polecenia" dobrze działają pod IE. Nie udało mi się tego ogarnąć. Nie przechodzi m.in.:

Podsumowanie

Jeżeli ktoś będzie w tym robił projekt, to polecam poważnie się zastanowić. Chodzi oczywiście o front. Wg mnie największą bolączką GWT są problemy gdy chcemy wycisnąć wszystkie soki z tego frameworka. Do tego dochodzi kompatybilność z IE, jakiś fajny design i mamy zabawę na długi czas. Sytuacja wygląda calkiem inaczej gdy korzystamy tylko i wyłącznie z tego co oferuje nam GWT. Wtedy jest w miarę dobrze :).

Autor wpisu

Piotr cichosz (shpyo) — Front-end developer Twórca kilku serwisów internetowych oraz autor kilku blogów. Pasjonat nowych, otwartych technologii.

Komentarze

Gavatar Ender

04.08.2011 Ender

Ja bym wolał w takiej sytuacji przekonać siłę wyższą, że należy pisać kod w czystym Javascripcie, ale... jak się nie ma co się lubi, to się kodzi w czym popadnie ;P

Gavatar procek

05.08.2011 procek

Z tego co widać to aby pisać w GWT trzeba zastosować taką samą liczbę haków jak w każdej innej bibliotece. Z tego jednak co mi wiadomo jQuery UI (choć ciężkie) oferuje znacznie lepsze wsparcie wszystkich przeglądarek.

Gavatar ciembor

16.08.2011 ciembor

Z wścibskości spytam, pracujesz tam jako programista Java, czy programista JavaScript który zajmuje się wyłącznie poprawianiem tego co schrzanią inni (włącznie z developerami GWT;))? Jakie alternatywy sugerowałbyś przy średnich i dużych projektach, oraz czy kierownictwo rozważało możliwość pisania w czymś innym?

Gavatar shpyo

16.08.2011 shpyo

@ciembor - jako front-end developer. Poprawiam widoki robione przez developerów GWT. Dla mnie najlepszym wyjściem byłoby stworzenie projektu, gdzie cała logika GUI, UX odbywała się za pomocą JS. Robiłem już w takim projekcie i było super. Wszystko pod kontrolą. Kierownictwo (klient) nie rozważał innej opcji. Może i rozważał, ale mnie nie było podczas tych rozmów.

Dodaj komentarz