7 Stimmen

Was sind die Hauptnachteile bei der Verwendung von Google Web Toolkit (GWT)

Nach einer langen Debatte zwischen vielen RIA/Ajax-Frameworks haben wir uns auf GWT geeinigt. Beim Lesen darüber scheint dieses Framework alles gut und einfach zu machen. Aber wie bei jeder Technologie gibt es immer Nachteile, und wir lernen sie auf die harte Tour.

Was sind die Hauptnachteile oder Probleme bei der Verwendung von Google Web Toolkit (GWT)?

(z.B.: Unterstützung für Vor-/Zurück-Tasten, langsame Reaktionszeiten, Layout-Positionierung, JavaScrit-Fehler, etc.)

Bis jetzt habe ich folgendes aus der Antwort erhalten:

  • Viel Code für einfache Benutzeroberflächen
  • Langsame Kompilierung

Danke

14voto

Gursel Koca Punkte 20310

Ich benutze GWT seit fast 2 Jahren. Obwohl man mich als Fan von GWT bezeichnen könnte, gibt es einige Probleme, die man kennen sollte ...

  1. Wie andere schon gesagt haben, ist die JavaScript-Kompilierung langsam. Meine Anwendung benötigt fast 4 Minuten für einen Core i7 CPU, 8 GB Speicher. Die Gesamtgröße des generierten JavaScript beträgt etwa 5 MB. Aber dank des Entwicklungsmodus ist die Kompilierung nach JavaScript nicht häufig erforderlich.

  2. GWT RPC ist extrem langsam im Entwicklungmodus. Es ist 100 Mal langsamer als der Hosted Mode. Das war für uns ein großes Problem. Wir haben darüber nachgedacht, GWT nur wegen dieses Problems aufzugeben. Der Grund für diese träge Leistung von GWT RPC im Entwicklungsmodus ist die Serialisierung. Die Serialisierung von Typen außer String ist im Dev-Modus unglaublich langsam. Wir haben unsere eigene benutzerdefinierte Serialisierung implementiert, sie ist fast 30 Mal schneller als die in GWT integrierte Serialisierung.

  3. Behauptungen, dass die Erstellung einer GWT-Anwendung nur Java-Kenntnisse erfordert, sind nur eine Illusion. Sie sollten solide Informationen über CSS und DOM haben. Wenn nicht, werden Sie zu viel Zeit mit der Fehlersuche Ihrer Benutzeroberfläche verbringen.

  4. Sie sollten bedenken, dass Sie nur eine kleine Teilmenge des JDK verwenden können, um GWT-Anwendungen zu implementieren. Reflection ist nicht verfügbar; Sie sollten Drittbibliotheken wie GWT ENT verwenden oder Ihren eigenen Generator für Reflection schreiben.

  5. Ein weiterer Nachteil, den man beachten sollte, ist die Größe des von dem GWT-Compiler generierten JavaScript. Die meisten GWT-Anwendungen bestehen aus einer einzigen Webseite, im Gegensatz zu mehrseitigen traditionellen Webanwendungen. Daher erfordert das Laden der Anwendung viel Zeit. Obwohl dies durch den Einsatz eines Multi-Modul-Ansatzes und des Code-Splittings gemildert werden könnte, ist die Verwendung dieser Techniken nicht immer einfach.

  6. Alle Serveraufrufe sind asynchron. Sie sollten sich darauf einstellen, asynchronen Code zu schreiben. Und der Nachteil von asynchronem Code ist, dass er komplexer und weniger lesbar ist als der äquivalente synchrone Code.

8voto

morisil Punkte 1335

Hier sind meine Beobachtungen zu den Nachteilen:

  • steile Lernkurve, wenn man GWT effektiv in großen Anwendungen verwenden möchte, aufgrund der enormen Anzahl von High-Level-Konventionen, die mit GWT verbunden sind.
  • Asynchrone Anfragen erfordern ein anderes Denken bei der Gestaltung der gesamten Anwendung
  • Lange Kompilierungszeit, die den Entwicklungsmodus nicht so sehr betrifft wie vollständige Builds (alle Permutationen für alle Browser und Sprachen werden kompiliert, was bei großen Projekten Stunden dauern kann). JRebel kann die Anforderungen für Neustarts des Entwicklungsmodus etwas reduzieren.
  • Probleme mit Unittests - GWTTestCase startet so lange, dass es für Unittests unbrauchbar ist. Dank GWTTestSuite kann es jedoch gut für Integrationstests funktionieren. Dank sauberem MVP ist es auch möglich, die Presenterlogik durch Mocking von Displays zu Unittesten (siehe meine Antwort).
  • Es erfordert etwas Erfahrung, um zu entscheiden, ob bestimmte Logik clientseitig (zu JS kompiliert) oder serverseitig implementiert werden sollte.
  • Und natürlich gibt es einige kleine Fehler, insbesondere in neuen Funktionen wie Editors und RequestFactory. Sie werden normalerweise schnell mit neuen Versionen behoben, jedoch kann es ärgerlich sein, wenn Sie auf ein GWT-Problem stoßen. Wie auch immer, der letzte Nachteil gilt für jedes Java-Framework, das ich bisher verwendet habe. ;)
  • Mangel an Reflektion auf der Clientseite, was mit Deferred Binding und Generators behoben werden könnte, aber es ist eine weitere Konvention zu lernen.

Wenn ich ein neues GWT-Projekt beginnen würde, würde ich:

  • Abhängigkeit von der Google GIN Bibliothek hinzufügen (leider funktioniert sie momentan nicht mit GWT 2.2, sollte aber bald kompatibel sein).
  • Allgemeine Layout mit LayoutPanels entwerfen
  • Anwendung "Fluss" entsprechend dem Konzept von Places und Activities strukturieren.
  • Alle Places in ein separates GWT-Modul setzen (gemeinsame Navigationsreferenzen)
  • Jede Aktivität in ein eigenes GWT-Modul setzen (es könnte später bei der Anwendungscodierungsaufteilung helfen)
  • Aktivität als Klebstoffcode behandeln, bei dem View- und Presenter-Provider mit GIN injiziert sind
  • Datenentitäten entwerfen, die mit RequestFactory kompatibel sind
  • Alle Daten-Editoren unter Berücksichtigung von UiBinder, MVP und Editorsframework erstellen
  • RequestFactory in Presenters sowie in Activities verwenden (um anfängliche Daten zum Anzeigen abzurufen).
  • Jedes identifizierte gemeinsame Element wie Standard-Datumsformat, usw. mit GIN injizieren

Das Spring Roo Tool kann eine Menge GWT-basierten Code für Standardanwendungselemente generieren.

2voto

Nathan Feger Punkte 18486

Ich habe vor einiger Zeit eine Prototypen-App mit GWT erstellt und festgestellt, dass die Zeit, die für das Kompilieren von Java nach JavaScript benötigt wird, sehr lange dauerte. Noch dazu hat sich die Kompilierzeit merklich mit jeder geschriebenen Codezeile erhöht.

Ich war einfach nicht zufrieden mit dem Code, die Kompilierungstestphase wurde im Laufe der Zeit immer langsamer.

Weitere Frage auf SO zum Compiler: Wie kann ich den GWT-Compiler beschleunigen?

2voto

jgrabowski Punkte 1451

Ich denke, dass der Hauptnachteil darin besteht, dass GWT oft viel Code erfordert, um einfache Aufgaben zu erledigen (aber mit jeder Veröffentlichung wird es immer besser). Andererseits ist es brillant, wenn es darum geht, komplexe, benutzerdefinierte Widgets zu entwickeln, wo es glänzt. In einigen Projekten hat sich GWT als sehr gut in Bezug auf Leistung erwiesen und es gab nicht viele Fehler - meiner Meinung nach ist es sehr gut in Bezug auf die Unterstützung verschiedener Browser.

0voto

Bellash Punkte 6596

Als Fan der Geburt Christi... Ich ziehe JQuery lieber GWT vor, weil es einfach ist, Animationen durchzuführen oder komplexe Aufgaben zu erledigen, ohne viele Klassen schreiben zu müssen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X