Największe pułapki GWT? [Zamknięte]

189

Jestem na początku / w połowie projektu, który zdecydowaliśmy się zrealizować za pomocą GWT. Czy ktoś napotkał jakieś poważne pułapki w używaniu GWT (i GWT-EXT), których nie można było pokonać? A może z perspektywy wydajności?

Kilka rzeczy, które już widzieliśmy / słyszeliśmy:

  • Google nie może indeksować treści
  • CSS i ogólnie stylizacja wydają się być nieco niestabilne

Szukam również dodatkowych opinii na temat tych przedmiotów. Dzięki!

agartzke
źródło
4
Ostatnio zauważyłem, że niektóre strony internetowe oparte na GWT pojawiają się poprawnie w moich wynikach wyszukiwania Google, mimo że podstawowy kod HTML nie zawiera informacji, których szukam (przykłady.roughian.com zawiera kilka takich wyników). Wygląda na to, że indeksator Google musi wykonywać inteligentne renderowanie javascript, aby dowiedzieć się, co faktycznie pojawi się na stronie, gdy wszystko się załaduje.
StriplingWarrior

Odpowiedzi:

231

Zacznę od stwierdzenia, że ​​jestem wielkim fanem GWT, ale tak, jest wiele pułapek, ale większość, jeśli nie wszystkie, byliśmy w stanie pokonać:

Problem: Długi czas kompilacji, wraz z rozwojem projektu rośnie czas potrzebny na jego kompilację. Słyszałem o raportach o kompilacjach trwających 20 minut, ale moje mają średnio około 1 minuty.

Rozwiązanie: Podziel kod na oddzielne moduły i powiedz ant, aby budował go tylko wtedy, gdy zostanie zmieniony. Również podczas programowania możesz znacznie przyspieszyć czas kompilacji, budując tylko dla jednej przeglądarki. Możesz to zrobić, umieszczając to w swoim pliku .gwt.xml:

<set-property name="user.agent" value="gecko1_8" />

Gdzie gecko1_8 to Firefox 2+, ie6 to IE itd.


Problem: Tryb hostowany jest bardzo powolny (przynajmniej w systemie OS X) i nie zbliża się do zmian „na żywo”, które otrzymujesz, gdy edytujesz rzeczy takie jak strony JSP lub Railsy i klikniesz odświeżanie w przeglądarce.

Rozwiązanie: Możesz dać trybowi hostowanemu więcej pamięci (generalnie mam 512 MB), ale nadal jest wolny, stwierdziłem, że gdy już będziesz wystarczająco dobry z GWT, przestaniesz go używać. Wprowadzasz dużą porcję zmian, a następnie kompilujesz tylko dla jednej przeglądarki (zazwyczaj kompilacja trwa 20 sekund), a następnie po prostu klikasz odświeżanie w przeglądarce.

Aktualizacja: W GWT 2.0+ nie stanowi to już problemu, ponieważ używasz nowego „Trybu rozwoju”. Zasadniczo oznacza to, że możesz uruchamiać kod bezpośrednio w wybranej przeglądarce, więc bez utraty szybkości, a także możesz go uruchomić / sprawdzić itp.

http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM


Problem: kod GWT to Java i ma inną mentalność niż układanie strony HTML, co utrudnia wykonanie projektu HTML i przekształcenie go w GWT

Rozwiązanie: Ponownie przyzwyczaisz się do tego, ale niestety konwersja projektu HTML do projektu GWT zawsze będzie wolniejsza niż robienie czegoś takiego jak konwersja projektu HTML na stronę JSP.


Problem: GWT zajmuje trochę czasu i nie jest jeszcze głównym nurtem. Oznacza to, że większość programistów, którzy dołączą do Twojego zespołu lub utrzymają Twój kod, będzie musiała nauczyć się go od podstaw

Rozwiązanie: Okaże się, czy GWT wystartuje, ale jeśli jesteś firmą, która kontroluje, kogo zatrudniasz, zawsze możesz wybrać osoby, które znają GWT lub chcą się go nauczyć.


Problem: GWT to młot w porównaniu do czegoś takiego jak jquery lub zwykły javascript. Aby to się stało, potrzeba dużo więcej konfiguracji niż samo dołączenie pliku JS.

Rozwiązanie: użyj bibliotek, takich jak jquery, do mniejszych, prostych zadań, które są do nich dostosowane. Korzystaj z GWT, gdy chcesz zbudować coś naprawdę złożonego w AJAX lub gdy musisz przekazywać swoje dane tam iz powrotem za pośrednictwem mechanizmu RPC.


Problem: Czasami, aby zapełnić swoją stronę GWT, musisz nawiązać połączenie z serwerem podczas pierwszego ładowania strony. Siedzenie w tym miejscu i obserwowanie symbolu ładowania podczas pobierania potrzebnych danych może być denerwujące.

Rozwiązanie: w przypadku strony JSP strona została już wyrenderowana przez serwer, zanim stała się HTML, więc możesz wtedy wykonać wszystkie wywołania GWT i wstępnie załadować je na stronę w celu natychmiastowego załadowania. Zobacz szczegóły:

Przyspiesz ładowanie strony dzięki wstępnej serializacji połączeń GWT


Nigdy nie miałem żadnych problemów ze stylizowaniem moich widżetów przez CSS, po wyjęciu z pudełka, niestandardowych lub w inny sposób, więc nie wiem, co masz na myśli przez to, że jest to pułapka?

Jeśli chodzi o wydajność, zawsze stwierdzałem, że raz skompilowany kod GWT jest szybki, a wywołania AJAX są prawie zawsze mniejsze niż odświeżanie całej strony, ale nie jest to unikalne dla GWT, chociaż natywne pakiety RPC, które otrzymujesz, jeśli używasz zaplecze JAVA jest dość kompaktowe.

rustyshelf
źródło
1
Napotkaliśmy kilka problemów, w których różne polecenia stylów / pozycjonowania nie wydawały się „przyjmować” - style nie były używane tam, gdzie powinny, lub rozmiar elementu zdawał się ignorować żądanie, aby było w 100%. To samo, co wiele zwykłych wyzwań CSS - prawdopodobnie dużo błędów użytkownika!
agartzke
@agartzke yeah to CSS dla Ciebie i przeważnie nie ma to nic wspólnego z GWT. Dlatego zatrudniamy wysoko wykwalifikowanych projektantów, którzy zajmują się tym za nas. Poprawne działanie w 4 różnych przeglądarkach nigdy nie jest łatwym zadaniem.
rustyshelf
1
W tym roku pojawi się wiele ekscytujących nowych funkcji, które znacznie poprawią wiele z tych problemów. Tryb hostowany poza procesem (OOPHM), CssResource (obduskacja / minifikacja arkusza stylów), UiBinder (inaczej „deklaratywny interfejs użytkownika”).
Mark Renouf
Naprawdę nie mogę się doczekać wersji 2.0, ale nie mogę się zgodzić z tym, że GWT jest młotem kowalskim. Jeśli tak jest, to jQuery i JavaScript są w najlepszym przypadku kłopotliwe. Chodzi mi o to, że nie mogę ponownie użyć, w końcu wklejam wiele rzeczy (powiedzmy: pole tekstowe na 4 stronach, które zachowuje się identycznie w każdym miejscu). Nie oznacza to, że powinieneś wyrzucić wszystkie swoje stare aplikacje. (Prawie) nigdy nie użyłbym GWT do dodania możliwości do istniejącej aplikacji html / js. Również zasoby CSS są w inkubatorze i lubię je: stackoverflow.com/questions/1066250/gwt-html-file-with-css/… .
Chris Ruffalo,
2
Możesz ponownie użyć JQuery tak samo, jak możesz ponownie użyć GWT, nie sądzę, aby to był ważny argument. Oba obsługują dziedziczenie, a następnie można je spakować do ponownego wykorzystania (plik .jar dla GWT, plik .js dla JQuery). Trzymam się tego, co powiedziałem, GWT to młot kowalski, musisz go zakodować w Javie, musisz go skompilować, masz o wiele więcej rzeczy do zarządzania. Jeśli jednak chcesz rozbić ścianę z cegły, wybierz młot kowalski. To nie jest krytyka, to ważny punkt. Właściwe narzędzie do właściwej pracy.
rustyshelf
54

Współpracujemy z GWT od prawie 2 lat. Wiele się nauczyliśmy. Oto, co myślimy:

  1. Nie używaj bibliotek widżetów innych firm, zwłaszcza gwt-ext. Zabije debugowanie, rozwój i wydajność działania. Jeśli masz pytania dotyczące tego, jak to się dzieje, skontaktuj się ze mną bezpośrednio.

  2. Użyj gwt, aby wypełnić tylko dynamiczne części aplikacji. Więc jeśli masz złożone interakcje użytkownika z wieloma polami. Nie używaj jednak dołączonych paneli. Weź istniejące strony dostarczone przez projektanta. Wytnij obszary, które będą zawierały elementy sterujące dla Twojej aplikacji. Dołącz te kontrolki do strony w ramach onModuleLoad (). W ten sposób możesz używać standardowych stron swojego projektanta, a także wykonywać wszystkie style poza gwt.

  3. Nie twórz całej aplikacji jako jednej standardowej strony, która następnie dynamicznie buduje wszystkie elementy. Jeśli zrobisz to, co sugeruję w punkcie 2, to i tak się nie stanie. Jeśli zbudujesz wszystko dynamicznie, zmniejszysz wydajność i zużyjesz ogromne ilości pamięci dla średnich i dużych aplikacji. Ponadto, jeśli zrobisz to, co sugeruję, przycisk Wstecz będzie działał świetnie, podobnie jak indeksowanie w wyszukiwarkach itp.

Inni komentatorzy również mieli kilka dobrych sugestii. Zasadą, której używam, jest tworzenie stron tak, jak robisz standardową stronę internetową. Następnie wytnij elementy, które muszą być dynamiczne. Zastąp je elementami, które mają identyfikatory, a następnie użyj, RootPanel.get( id ).add( widget )aby wypełnić te obszary.

olibre
źródło
Otworzyłem pytanie dotyczące Twojej odpowiedzi na stackoverflow.com/q/10025656/138585 . Będę wdzięczny, jeśli możesz rzucić okiem.
Elad,
20

Pułapki, które napotkaliśmy:

  • Chociaż możesz uzyskać wiele kilometrów, używając czegoś takiego jak GWT EXT, za każdym razem, gdy używasz tego rodzaju cienkiej okleiny na szczycie biblioteki JavaScript, tracisz możliwość debugowania. Nieraz waliłem głową w biurko, ponieważ nie mogę sprawdzić (wewnątrz mojego debuggera IntelliJ), co się dzieje w klasie tabeli GWT EXT ... Wszystko, co możesz zobaczyć, to to, że jest to JavaScriptObject. To sprawia, że ​​trudno jest dowiedzieć się, co poszło nie tak ...

  • Brak w zespole kogoś, kto zna CSS. Z mojego doświadczenia nie miało znaczenia, że ​​dana osoba nie była ekspertem ... wystarczy, że ma dobrą wiedzę praktyczną i zna odpowiednie terminy do wyszukania w razie potrzeby.

  • Debugowanie w różnych przeglądarkach. Miej oko na tryb hostowany poza procesem [ 1 ] [ 2 ] [ 3 ], miejmy nadzieję, że pojawi się w GWT 1.6 ... Na razie wystarczy, że działa dobrze z trybem hostowanym, a następnie użyć przycisku „Kompiluj / Przeglądaj” , gdzie możesz grać z innymi przeglądarkami. Dla mnie, pracując w systemie Windows, oznacza to, że mogę przeglądać swoją pracę w FireFox i używać FireBug do pomocy w dostosowywaniu i ulepszaniu rzeczy.

  • IE6. To niesamowite, jak różnie IE 6 będzie renderować rzeczy. Przyjąłem podejście polegające na zastosowaniu stylu do najbardziej zewnętrznego "widoku" zgodnie z przeglądarką, dzięki czemu mogę mieć reguły CSS, takie jak:

    .my-style { /* stuff that works most everywhere */ }
    
    .msie6 .my-style { /* "override" so that styles work on IE 6 */ }
    

Na koniec upewnij się, że korzystasz z edytora, który ci pomoże. Używam IntelliJ - ma wiele inteligentnych rozwiązań GWT. Na przykład, jeśli spróbuję użyć klasy, która nie jest obsługiwana przez emulację środowiska JRE, informuje mnie o tym; jeśli określę styl dla widżetu, a nie zdefiniowałem jeszcze tego stylu, kod otrzyma małą czerwoną falistą ... lub, patrząc na CSS, powie mi, kiedy określiłem sprzeczne atrybuty w jedna zasada. (Jeszcze tego nie wypróbowałem, ale rozumiem, że wersja 8 ma jeszcze lepszą obsługę GWT, na przykład utrzymywanie synchronizacji interfejsów RPC „lokalnych” i „asynchronicznych”).

jgindin
źródło
18

GWT 2.0, który ma się ukazać w ciągu najbliższych kilku miesięcy, rozwiązuje wiele omawianych problemów.

  • Twórz układy przy użyciu składni podobnej do html / xml
  • Dynamiczne ładowanie skryptów - początkowo zostanie pobrany tylko niezbędny JS. Reszta zostanie pobrana w razie potrzeby
  • Tryb hostowany w przeglądarce - może to rozwiązać omówione problemy z szybkością trybu hostowanego, między innymi
  • „Optymalizacje kompilatora” - miejmy nadzieję, szybsza kompilacja

Podgląd wideo GWT 2.0 na Google I / O

Adam Albrecht
źródło
15

Nie „nie do pokonania”, ale trochę bólu za coś podstawowego.

Obsługa dat:

GWT używa przestarzałego, java.util.Dateco może prowadzić do nieoczekiwanego zachowania podczas obsługi dat po stronie klienta. java.util.Calendarnie jest obsługiwany przez GWT. Więcej informacji tutaj .

Powiązane przykłady problemów:

Jla
źródło
1
Dwa lata później i nadal tak jest. Wykonywanie matematycznych danych na kliencie pozostaje dość denerwujące.
Joseph Lust
Problemem jest tłumaczenie (kompilacja) z java.util.Calendarna JavaScript. Możesz również rzucićCalendarUtil okiem na klasę GWT , Jak używać java.util.Calendar w GWT i Jak wykonywać operacje kalendarza w Java GWT? Jak dodać dni do daty? . Pozdrawiam;)
olibre
10

Dodam kilka punktów do już wymienionych:

  • Wiązanie / walidacja danych. GWT nie ma wsparcia dla wiązania danych / walidacji po wyjęciu z pudełka, chociaż niektóre projekty w tym obszarze zaczynają się pojawiać. Piszesz dużo tego:
TextField fname, faddress;
...
fname.setText (person.getName ());
faddress.setText (person.getAddress ());
...
  • Powolne ładowanie. Ponieważ gwt jest po stronie klienta, leniwe ładowanie naprawdę nie wchodzi w grę. Aby to zrobić, będziesz musiał starannie zaprojektować swoje RPC i obiekty domeny
    • wyślij wszystkie potrzebne dane obiektu
    • unikaj szybkiego pobierania wszystkich swoich danych
    • Musisz również upewnić się, że nie wyślesz serwerów proxy / obiektów, których nie można serializować. hibernate4gwt może Ci w tym pomóc.
  • Projekt interfejsu użytkownika. Trudniej jest wizualizować interfejs użytkownika w java (panele, przyciski itp.) Niż w html.
  • Wsparcie historii. GWT nie jest dostarczany z podsystemem Historia, ani nie jest dostarczany z żadnym podsystemem dla ładnych adresów URL lub stanowych zakładek. Będziesz musiał rzucić własne (chociaż obsługuje on żetony historii, co jest początkiem). Dzieje się tak ze wszystkimi zestawami narzędzi AJAX AFAIK.

IMHO, w GWT brakuje frameworka, który po wyjęciu z pudełka obsługuje wszystkie problemy wymienione w tym „wątku”.

Miguel Ping
źródło
GWT jest dostarczany z systemem historii, np. History.newItem ("myItem", false); umieści #myItem w adresie URL, aby ułatwić tworzenie zakładek. Aby obsłużyć ładowanie zakładki za pomocą aplikacji, po prostu użyj History.addValueChangeHandler (myHandlerMethod);
Ztranger
Nie jest to system historii jako taki, to tylko mechanizm zapisywania tokenów do adresu URL i obsługi powiadomień o zmianach tokenów. Nadal będziesz musiał napisać cały kod aplikacji, aby obsługiwać zmiany historii.
Miguel Ping
9

Pracuję teraz nad projektem, który używa EXT GWT (GXT), aby nie mylić go z GWT EXT. Jest różnica, EXT GWT to ten, który jest faktycznie produkowany przez firmę, która napisała ExtJS bibliotekę javascript. GWT EXT to opakowanie GWT wokół biblioteki ExtJS. GXT to natywny GWT.

W każdym razie GXT jest wciąż nieco niedojrzały i brakuje mu solidnej społeczności, którą moim zdaniem ma GWT EXT. Jednak przyszłość jest z GXT, ponieważ jest to natywny GWT i faktycznie opracowany przez firmę, która stworzyła ExtJS. GWT EXT jest nieco okaleczony, ponieważ zmieniła się licencja w bibliotece ExtJS, spowalniając w ten sposób rozwój GWT EXT.

Ogólnie uważam, że GWT / GXT to dobre rozwiązanie do tworzenia aplikacji internetowych. Właściwie całkiem podoba mi się tryb hostowany do programowania, dzięki czemu wszystko jest szybkie i łatwe. Zyskasz również możliwość debugowania kodu. Testy jednostkowe z JUnit również są całkiem solidne. Nie widziałem jeszcze świetnego środowiska do testowania jednostkowego JavaScript, który moim zdaniem byłby wystarczająco dojrzały do ​​testowania aplikacji korporacyjnej.

Więcej informacji na temat GWT EXT: http://gwt-ext.com/

Więcej informacji na temat EXT GWT (GXT): http://extjs.com/products/gxt/

JP Richardson
źródło
1
Ponieważ to pytanie jest nadal aktywne i zbiera głosy, pomyślałem, że przedstawię aktualizację. Całkowicie porzuciłem GXT (2009-2010), ponieważ nie podobały mi się praktyki biznesowe Sencha Inc. Następnie porzuciłem GWT. Bałem się używania JavaScript tak długo, jak długo go nienawidziłem. To znaczy, dopóki naprawdę tego nie zrozumiałem. Teraz rozwijam się prawie wyłącznie w Node.js / AngularJS. Wrzuć Bootstrap 3 i stworzysz niesamowicie wyglądającą stronę internetową w znacznie krótszym czasie niż GWT. Przyszłość to JavaScript, im wcześniej go opanujesz, tym lepszym będziesz programistą.
JP Richardson
Jaka jest teraz twoja opinia? (po prostu ciekawy) Dzięki.
Akos Lukacs
1
@AkosLukacs Nadal mogę zgłosić, że używam JavaScript i uwielbiam go w każdym calu! Jak powiedziałem, nienawidzę JavaScript i dlatego wybrałem GWT. W rzeczywistości nie będziesz w stanie uniknąć JavaScript, jeśli zamierzasz tworzyć strony internetowe, więc równie dobrze możesz to zaakceptować. Prawie przystosowałem się do używania JavaScript do wszystkiego (trochę zboczyłem z Go). Jeśli chodzi o mój stos, używam Node.js / Express / React. Kiedyś byłem wielkim fanem Angulara i znam go całkiem dobrze, ale nie mogę polecić Angulara 1.x każdemu zaczynającemu od JS, ponieważ krzywa uczenia się jest zbyt wysoka.
JP Richardson
5

Żadnych większych pułapek, których nie byłbym w stanie łatwo pokonać. Używaj intensywnie trybu hostowanego. Ponieważ używasz GWT-ext, prawie nigdy nie będziesz musiał samodzielnie dotykać CSS, chyba że chcesz dostosować wygląd po wyjęciu z pudełka.

Moją rekomendacją jest użycie „natywnego” widżetu GWT zamiast widżetu bibliotecznego, w którym znajdują się blisko funkcji.

Ponownie indeksowanie w wyszukiwarkach: tak, witryna normalnie nie będzie miała adresów URL, po których można się poruszać (chyba że dodajesz widżety tylko do elementów zwykłej witryny internetowej). Możesz jednak wykonać funkcję historii wstecz / dalej.

Michael Neale
źródło
4

Użyłem GWT i GWT-ext razem w projekcie jakiś czas temu. Wydaje mi się, że programowanie stron internetowych przebiega całkiem gładko, ale moja rada jest taka:

Nie mieszaj natywnych widżetów GWT z widżetami EXT. To mylące jak cholera, ponieważ zwykle nazwy są takie same (GWT.Button czy GWText.Button?)

Jedyną rzeczą, która przydarzyła mi się, która naprawdę skomplikowała kod, niż bym chciał, było to, że chciałem Panel, który był a) dynamicznie aktualizowany b) kaskadowy

Panele natywne GWT są dynamiczne, panele Ext są kaskadowe. Rozwiązanie? GWT.VerticalPanel opakowujący panel GWTExt ... Chaos. :)

Ale hej, to działa. ;)

As
źródło
4

Za komentarzem ykagano, największą wadą jest utrata V w MVC. Chociaż możesz oddzielić prawdziwą klasę interfejsu użytkownika od reszty kodu po stronie klienta, nie możesz łatwo użyć strony HTML wygenerowanej przez grafika / projektanta stron internetowych. Oznacza to, że potrzebujesz programisty, aby przetłumaczyć HTML na java.

Pobierz edytor WYSIWYG UI, który pozwoli Ci zaoszczędzić mnóstwo czasu. Używam GWTDesigner.

Największą zaletą GWT jest możliwość zapomnienia o problemach z różnymi przeglądarkami. To nie jest w 100%, ale usuwa prawie cały ból. W połączeniu z zaletami debugowania w trybie hostowanym (w przeciwieństwie do Firebug, który jest doskonały, ale nie taki sam jak debugger java), daje programistom ogromną przewagę w generowaniu złożonych aplikacji Ajax.

Aha i jest szybki w czasie wykonywania, zwłaszcza jeśli używasz filtra gzip.

Steve Buikhuizen
źródło
1
Nie wiedziałem o filtrze gzip - dzięki za tę ciekawostkę.
agartzke,
4

Trochę nie na temat, ale kanał #gwt na irc jest bardzo pomocny na wypadek, gdybyś miał uporczywy problem.


źródło
w której sieci IRC jest kanał?
tovare
Jest na freenode (irc.freenode.net). W rzeczywistości jest to ## gwt, ale zostaniesz przekierowany do niego, jeśli wpiszesz #gwt.
stian
4

GWT jest dość proste i intuicyjne.

Zwłaszcza z wydaniem UIBinder, aby umożliwić układanie widgetów GWT w XML, a następnie kodowanie w Javie.

Więc jeśli używałeś innych narzędzi do projektowania Ajax, Flash, Silverlight itp., GWT jest bardzo łatwy do nauczenia.

Główną przeszkodą, jeśli nie pułapką, jest GWT RPC. Powodem, dla którego chcesz używać GWT, jest asynchroniczny RPC GWT. W przeciwnym razie dlaczego nie polegać tylko na css w celu sformatowania strony?

GWT RPC to ten element, który umożliwia serwerowi odświeżanie danych na serwerze bez konieczności odświeżania strony. Jest to bezwzględny wymóg w przypadku stron, takich jak monitorowanie notowań giełdowych (lub aktualnego długu publicznego i publicznego Stanów Zjednoczonych lub liczby nienarodzonych dzieci na świecie w ciągu sekundy).

Zrozumienie GWT RPC wymaga pewnego wysiłku, ale po kilku godzinach wszystko powinno być jasne.

Poza tym, po włożeniu wysiłku w nauczenie się GWT RPC, w końcu odkrywasz, że nie możesz używać stron JSP jako komponentu usługi dla RPC, chyba że ... Mam 8-częściową (chyba) serię na moim blogu o tym, jak używać JSP jako serwisant GWT RPC. Ponieważ jednak nie prosiłeś o odpowiedzi, a tylko o problemy, powstrzymam się od reklamowania mojego bloga.

Więc. Jestem głęboko przekonany, że najgorszymi przeszkodami / pułapkami związanymi z korzystaniem z GWT jest ustalenie, jak prawidłowo wdrożyć asynchroniczne RPC GWT i jak umożliwić mu korzystanie z serwerów JSP.

Błogosławiony Geek
źródło
Chciałbym mieć link do artykułów na Twoim blogu;)
ms-tg
h2g2java.blessedgeek.com
Blessed Geek
3

Bardzo ciężko nam było połączyć naszą bazę kodów GWT z szablonami HTML, które otrzymaliśmy od projektanta stron internetowych (statyczne strony HTML z określonymi identyfikatorami div, którymi chcieliśmy zarządzać w GWT). Przynajmniej kiedy go używaliśmy, nie mogliśmy zintegrować GWT z częściami naszej witryny, które nie zostały zakodowane w GWT. W końcu udało nam się to działać, ale to był duży hack.

ykaganovich
źródło
3
  • Interfejs Async, który musisz napisać dla każdego interfejsu usługi, wygląda jak coś, co mogło zostać automatycznie wygenerowane przez kompilator GWT.
  • W przypadku dużych projektów czas kompilacji wydłuża się

Ale dla dużego projektu Javascript to najlepszy wybór


źródło
3

GWT 2.4 rozwiązało wiele z wyżej wymienionych problemów, a świetna biblioteka widżetów właśnie wychodzi z Beta (Ext GWT 3.0.4 aka GXT), która jest napisana w całości w GWT, a nie jest opakowaniem biblioteki JS.

Pozostały ból:

  • Brak obsługi selektora CSS3, w niektórych przypadkach możesz użyć "literal ()", aby to obejść.
  • Brak obsługi CSS3 i nowoczesnych zdarzeń przeglądarek, takich jak przejścieEnd .
  • Brak obsługi klas Java Calendar (wiele lat później).
  • Brak wsparcia dla JUnit4 (5 lat i wciąż rośnie).
  • Brak jasnej mapy drogowej i harmonogramu wydań od zespołu Google GWT.
Joseph Lust
źródło
2

Jeśli chodzi o GWT 2.4, używaj przeglądarki Firefox podczas debugowania GWT, jest to znacznie szybsze niż korzystanie z Chrome. A jeśli będziesz używać tylko przeglądarki Firefox, rozważ umieszczenie tej linii w pliku project.gwt.xml

<set-property name="user.agent" value="gecko1_8" />

Ponadto, jeśli używasz eclipse, dodaj następujące argumenty w obszarze arguments -> VM arguments:

-Xmx512m -XX: MaxPermSize = 1024m -XX: PermSize = 1024m

Możesz podzielić serwer i klienta i użyć następujących argumentów w argumentach -> Program arguments: -codeServerPort 9997 -startupUrl http: // yourserver / project -noserver

Ponadto, aby zapobiec odświeżaniu serwera przy każdej zmianie, użyj http://zeroturnaround.com/blog/how-to-rock-out-with-jrebel-and-google-web-toolkit-gwt/ JRebel A oto prezentacja na żywo http://www.youtube.com/watch?feature=player_embedded&v=4JGGFCzspaY

Gal Bracha
źródło
1

Jedną z głównych pułapek jest to, że czasami trzeba jawnie przypisać identyfikator do tego, co ostatecznie stanie się elementem HTML, aby móc używać określonych stylów CSS. Na przykład: GWT TabPanel zrobi tylko: najedź kursorem na tabBarItems, gdy tabBar tabPanel ma przypisany identyfikator i określisz a: hover na tym elemencieId.

O innych wadach GWT pisałem gdzie indziej, ale są one już objęte odpowiedzią rustyshelf :).

Dezorientacja
źródło
Generalnie przypisywanie identyfikatorów nie jest złą rzeczą, jeśli planujesz wykonać test przy użyciu Selenium.
Petteri H
1

W ostatnim czasie wykonałem dużo pracy nad GWT i oto co muszę powiedzieć:

  1. Styl CSS jest trudny tylko czasami, użyj narzędzia deweloperskiego IE w IE i firebug w Firefoksie, aby dowiedzieć się, co dokładnie się dzieje, a uzyskasz jasny obraz tego, co należy zmienić w CSS
  2. Możesz użyć sztuczek, aby Google go zindeksował. Bardzo znaną stroną jest http://examples.roughian.com/ sprawdź jej oceny w google. O wiele mniej znaną witryną jest www.salvin.in (nie mogłem się oprzeć, by o tym wspomnieć), zoptymalizowałem ją do słów: strona główna salvin (wyszukaj w Google te trzy słowa)

Nie wiem zbyt wiele o GWT-EXT, ale ja też jestem przekonany, że nie ma potrzeby dołączania bibliotek innych firm.

Powodzenia w podjęciu decyzji :)

Salvin Francis
źródło
1

GWT wykrywa przeglądarkę zamiast wykrywania funkcji, a Twoja aplikacja nie będzie działać w niektórych przeglądarkach (szczególnie nowych)

Oto kilka odniesień do problemu:

Oto kilka odniesień do wykrywania funkcji:

Pobrane z porównania struktur JavaScript - Wikipedia

Eduardo
źródło
1

Zespół GWT wprowadził wiele wspaniałych ulepszeń do wydania GWT 2.7 w zeszłym roku. Jedną z głównych słabości GWT było to, że kompilacja w GWT 2.6 i starszych zajmuje zbyt dużo czasu. To już minęło GWT nie ma kompilacji przyrostowej, która jest super szybka i kompiluje tylko zmiany.

GWT 2.7 ma teraz ( Źródło ):

  • Kompilacje przyrostowe mają teraz tylko kilka sekund
  • Bardziej kompaktowe, dokładniejsze mapy źródłowe
  • Wsparcie GSS
  • JSInterop
  • Świetna wydajność JavaScript
  • Mniejszy rozmiar kodu
konfile
źródło
1

Najlepszym sposobem na uzyskanie wiarygodnych faktów jest badanie ankiety gwt . Jednym z największych problemów z GWT zawsze był długi czas kompilacji. Na szczęście poprawia się bardzo szybko, więc nie będzie to poważny problem w najbliższej przyszłości. Kolejną pułapką jest to, że GWT jest znacznie bardziej skomplikowane, ponieważ Java jest bardziej złożonym językiem, który opiera się złym programistom na każdym kroku. Ponadto kompilacja dodaje warstwę. Na przykład współdziałanie js wymaga trochę standardowego schematu. Podstawową kwestią jest to, że GWT nie został zaprojektowany jako prosty. Został zaprojektowany od podstaw z myślą o niezwykle skomplikowanych aplikacjach internetowych, a cała społeczność konsekwentnie stawia priorytety, wydajność, jakość kodu, architekturę itp. Nad łatwym kodowaniem.
Pamiętaj, że możesz użyć js w GWT w dowolnym momencie, więc jeśli masz problemy z GWT, rozważ użycie js. W końcu GWT to js, ​​więc możesz zrobić wszystko w GWT, co możesz w js. W rzeczywistości większość projektów GWT używa js. Problem w tym, że GWT jest drastycznie bardziej skomplikowane. Niemniej jednak czasami jest to warte dodatkowej złożoności.

Warto zauważyć, że GWT 3.0 przyniesie ogromne ulepszenia.

jgleoj23
źródło
0

Ponowne wykorzystanie obiektów usług RPC.
Powoduje wyścigi z objawami przypominającymi zawieszenie aplikacji.

antony.trupe
źródło
Antony, czy mógłbyś to rozwinąć. Wykonuję wywołanie RPC do serwera i oczekuję, że interfejs GUI będzie odpowiadał, dopóki żądanie nie wróci, ale wygląda na to, że się zawiesił.
Brett Hannah
0

Pułapki, na które natknąłem się 1. Inne zachowanie w trybie superdev. Np. Someclass.class.getName () działa absolutnie dobrze w trybie Superdev i zwraca w pełni kwalifikowaną nazwę klasy. W trybie produktywnym to nie działa.

  1. addWidget (widget) wywoła funkcję removefromparent () widżetu
Marcel Pater
źródło
0

GWT to arcydzieło technologii. Łączy programowanie klienta i serwera, tworząc jedną spójną aplikację - sposób, w jaki oprogramowanie zostało napisane przed „warstwowaniem” i sposób, w jaki powinno być napisane. Eliminuje różne zestawy umiejętności, nieporozumienia między członkami zespołu i ogólnie całą fazę projektowania stron internetowych: zarówno artystyczną, jak i programistyczną. I to jest najbliżej rozwiązań mobilnych, np. Programowania na Androida. W rzeczywistości GWT został zaprojektowany do generowania różnych natywnych interfejsów użytkownika, a nie tylko HTML. Chociaż to wymaga ogromnej dyscypliny, aby zapewnić takie oddzielenie - aby utrzymać wewnętrzną warstwę niezależną od prezentacji.

Pierwszym błędem, którego powinieneś uniknąć, a którego zrozumienie zajęło mi cztery lata, jest używanie rozszerzeń innych firm, takich jak EXT-GWT aka GXT i SmartGWT. To bardzo kuszące, aby zacząć używać ich ładnych widgetów, zamiast inwestować we własną stylizację, ale nie mogę powiedzieć, ile problemów miałem ze SmartGWT, dopóki w końcu nie miałem dość. Krótko mówiąc, zamraża podstawową funkcję GWT ustawioną na pewnym (dość przestarzałym) poziomie, a następnie buduje na niej. Pamiętaj również, że wyrzeźbiony wygląd pulpitu wygląda obecnie głupio, nie wspominając o powolnej wydajności, mnóstwie błędów i funkcjach kompatybilności - szczególnie na urządzeniach mobilnych. Chcesz pozostać jak najbliżej rodzimych elementów sterujących przeglądarki, np. Listy rozwijane renderowane jako natywne elementy <select>, a nie niektóre niestandardowe elementy sterujące.

Dzięki trendom mobilnym cały UX staje się prostszy i bardziej płaski, więc nie trzeba wiele robić, by stylizować dobrze wyglądającą aplikację. Chociaż jeśli chcesz mieć wygląd „3D”, są też gradienty. CSS3 sprawił, że wszystko stało się łatwe, a GWT opakowuje to w elegancki, zorientowany obiektowo sposób, w przeciwieństwie do surowego CSS. Nie zniechęcaj się więc patrząc na raczej brzydkie kontrolki barebone w GWT Showcase. Zespół GWT celowo nie oferował żadnej stylizacji, ponieważ to praca programisty.

Reszta to prawie konwencjonalne programowanie w przeglądarce w silnie pisanej Javie z pięknymi zwięzłymi interfejsami API. Ale oczywiście nigdy nie zapominaj, że twój kod działa w przeglądarce, więc wszystkie wywołania są asynchroniczne, np. Nie możesz wywoływać metod GWT-RPC w pętli (aby zapełnić jakąś listę), ale musisz je rekurencyjnie łączyć, jeśli kiedykolwiek do tego dojdziesz sytuacja.

Istnieją pewne samozwańcze „anty-wzorce”, takie jak zakaz używania GWT-RPC. Jak dotąd było mi dobrze: przez 10 lat. Prostota to podstawa. Nie pomyślałbym nawet o tym, żeby poświęcić trochę marginalnej wydajności dla elegancji kodu i łatwości utrzymania. poza tym nie jest to miejsce, w którym byłyby wąskie gardła - w bazie danych. Oczywiście pamiętaj, ile danych wysyłasz do klienta.

A jeśli nie możesz znaleźć istniejącego gadżetu lub nadać mu stylu - przeczytaj zestaw sformatowanych elementów HTML5, zawsze możesz opakować gadżet innej firmy. Zrobiłem to z popularnym jQuery FullCalendar. Wcale nie fizyka jądrowa. Wszystko inne, takie jak Mapy Google i Wykresy Google, ma półoficjalne opakowania GWT.

GWT jest doskonały. Jedynym powodem, dla którego nie ma wystarczająco dużo miłości, jest to, że pierwsi użytkownicy Internetu, którzy nadal mają wpływ na branżę, nie wywodzili się z informatyki i języków obiektowych, aby je docenić. Mają tło artystyczne (Photoshop / WordPress) lub sieciowe (Perl / Python).

Alex Rogachevsky
źródło