Ich beginne damit, dass ich ein großer GWT-Fan bin, aber ja, es gibt viele Fallstricke, aber die meisten, wenn nicht alle, die wir überwinden konnten:
Problem: Lange Kompilierungszeiten, wenn Ihr Projekt wächst, nimmt auch die Zeit zu, die zum Kompilieren benötigt wird. Ich habe von Berichten über 20-minütige Kompilierungen gehört, aber meine sind durchschnittlich etwa 1 Minute lang.
Lösung: Teilen Sie Ihren Code in separate Module auf und weisen Sie ant an, ihn nur zu erstellen, wenn er geändert wird. Während der Entwicklung können Sie die Kompilierungszeiten erheblich beschleunigen, indem Sie nur für einen Browser erstellen. Sie können dies tun, indem Sie dies in Ihre .gwt.xml-Datei einfügen:
<set-property name="user.agent" value="gecko1_8" />
Wobei gecko1_8 Firefox 2+ ist, dh6 IE ist usw.
Problem: Der gehostete Modus ist sehr langsam (zumindest unter OS X) und entspricht nicht annähernd den "Live" -Änderungen, die Sie erhalten, wenn Sie Dinge wie JSPs oder Rails-Seiten bearbeiten und in Ihrem Browser auf "Aktualisieren" klicken.
Lösung: Sie können dem gehosteten Modus mehr Speicher geben (ich habe normalerweise 512 MB), aber es ist immer noch langsam. Ich habe festgestellt, dass Sie dies nicht mehr verwenden, wenn Sie mit GWT gut genug sind. Sie nehmen einen großen Teil der Änderungen vor, kompilieren dann für nur einen Browser (in der Regel im Wert von 20 Jahren) und klicken dann in Ihrem Browser auf Aktualisieren.
Update: Mit GWT 2.0+ ist dies kein Problem mehr, da Sie den neuen 'Entwicklungsmodus' verwenden. Dies bedeutet im Grunde, dass Sie Code direkt in dem Browser Ihrer Wahl ausführen können, sodass keine Geschwindigkeitsverluste auftreten. Außerdem können Sie ihn feuern / inspizieren usw.
http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM
Problem: GWT-Code ist Java und hat eine andere Mentalität als das Layout einer HTML-Seite, wodurch es schwieriger wird, ein HTML-Design in GWT umzuwandeln
Lösung: Sie gewöhnen sich wieder daran, aber leider ist das Konvertieren eines HTML-Designs in ein GWT-Design immer langsamer als das Konvertieren eines HTML-Designs in eine JSP-Seite.
Problem: GWT braucht ein wenig Zeit, um sich zurechtzufinden, und ist noch nicht Mainstream. Das bedeutet, dass die meisten Entwickler, die Ihrem Team beitreten oder Ihren Code pflegen, ihn von Grund auf neu lernen müssen
Lösung: Es bleibt abzuwarten, ob GWT startet, aber wenn Sie ein Unternehmen sind, das die Kontrolle darüber hat, wen Sie einstellen, können Sie immer Leute auswählen, die GWT entweder kennen oder lernen möchten.
Problem: GWT ist ein Vorschlaghammer im Vergleich zu etwas wie jquery oder einfach nur Javascript. Es erfordert viel mehr Setup, um dies zu erreichen, als nur eine JS-Datei einzuschließen.
Lösung: Verwenden Sie Bibliotheken wie jquery für kleinere, einfache Aufgaben, die für diese geeignet sind. Verwenden Sie GWT, wenn Sie in AJAX etwas wirklich Komplexes erstellen möchten oder wenn Sie Ihre Daten über den RPC-Mechanismus hin und her übertragen müssen.
Problem: Manchmal müssen Sie beim ersten Laden der Seite einen Serveraufruf durchführen, um Ihre GWT-Seite zu füllen. Es kann für den Benutzer ärgerlich sein, dort zu sitzen und ein Ladesymbol zu beobachten, während Sie die benötigten Daten abrufen.
Lösung: Im Fall einer JSP-Seite wurde Ihre Seite bereits vom Server gerendert, bevor sie zu HTML wurde, sodass Sie dann tatsächlich alle Ihre GWT-Aufrufe ausführen und sie für ein sofortiges Laden auf die Seite vorladen können. Siehe hier für Details:
Beschleunigen Sie das Laden von Seiten, indem Sie Ihre GWT-Anrufe vorserialisieren
Ich hatte noch nie Probleme mit dem CSS-Stil meiner Widgets, sofort einsatzbereit, benutzerdefiniert oder auf andere Weise. Ich weiß also nicht, was Sie damit meinen, dass dies eine Gefahr ist.
Was die Leistung angeht, habe ich immer festgestellt, dass einmal kompilierter GWT-Code schnell ist und AJAX-Aufrufe fast immer kleiner sind als eine ganze Seitenaktualisierung, aber das ist nicht wirklich nur bei GWT der Fall, obwohl die nativen RPC-Pakete, die Sie erhalten, wenn Sie sie verwenden Ein JAVA-Backend ist ziemlich kompakt.