Größte GWT-Fallstricke? [geschlossen]

189

Ich bin am Anfang / in der Mitte eines Projekts, das wir mit GWT implementieren wollten. Hat jemand größere Fallstricke bei der Verwendung von GWT (und GWT-EXT) festgestellt, die nicht überwunden werden konnten? Wie wäre es aus Sicht der Leistung?

Einige Dinge, die wir bereits gesehen / gehört haben, sind:

  • Google kann keine Inhalte indizieren
  • CSS und Styling scheinen im Allgemeinen etwas schuppig zu sein

Suchen Sie auch nach zusätzlichen Rückmeldungen zu diesen Artikeln. Vielen Dank!

Agartzke
quelle
4
In letzter Zeit habe ich festgestellt, dass einige GWT-basierte Websites in meinen Google-Suchergebnissen korrekt angezeigt werden, obwohl das zugrunde liegende HTML nicht die Informationen enthält, nach denen ich suche (examples.roughian.com enthält mehrere dieser Ergebnisse). Es scheint, dass der Google-Indexer ein intelligentes Javascript-Rendering durchführen muss, um herauszufinden, was tatsächlich auf einer Seite angezeigt wird, wenn alles geladen ist.
StriplingWarrior

Antworten:

231

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.

rostig
quelle
1
Wir sind auf verschiedene Probleme gestoßen, bei denen verschiedene Stile / Positionierungsbefehle nicht "zu nehmen" schienen - Stile, die nicht dort verwendet wurden, wo sie hätten sein sollen, oder die Größe eines Elements, das die Anforderung, es zu 100% zu machen, zu ignorieren schien. Wie viele reguläre CSS-Herausforderungen - möglicherweise viele Benutzerfehler!
Agartzke
@agartzke Ja, das ist CSS für dich, und es hat meistens nichts mit GWT zu tun. Deshalb beschäftigen wir hochqualifizierte Designer, um so etwas für uns zu tun. Es ist nie einfach, es in 4 verschiedenen Browsern richtig zu machen.
Rustyshelf
1
Später in diesem Jahr gibt es viele aufregende neue Funktionen, die viele dieser Probleme erheblich verbessern. Out-of-Process-Hosted-Modus (OOPHM), CssResource (Stylesheet-Verschleierung / Minimierung), UiBinder (auch bekannt als "deklarative Benutzeroberfläche").
Mark Renouf
Ich freue mich wirklich auf 2.0, aber ich muss nicht zustimmen, dass GWT der Vorschlaghammer ist. Wenn dies der Fall ist, sind jQuery und JavaScript bestenfalls ein Problem. Mein Punkt ist, dass ich keine Wiederverwendung bekomme und am Ende viele Dinge kopiere (sagen wir: ein Textfeld auf 4 Seiten, das sich an jeder Stelle identisch verhält). Das heißt nicht, dass Sie alle Ihre alten Anwendungen wegwerfen sollten. Ich würde GWT (fast) nie verwenden, um einer vorhandenen HTML / JS-Anwendung Funktionen hinzuzufügen. Auch CSS-Ressourcen befinden sich im Inkubator und ich mag sie: stackoverflow.com/questions/1066250/gwt-html-file-with-css/… .
Chris Ruffalo
2
Sie können JQuery genauso oft wiederverwenden wie GWT. Ich denke nicht, dass dies ein gültiges Argument ist. Beide unterstützen die Vererbung und können dann zur Wiederverwendung gepackt werden (.jar-Datei für GWT, .js-Datei für JQuery). Ich stehe zu dem, was ich gesagt habe. GWT ist ein Vorschlaghammer. Man muss ihn in Java codieren, man muss ihn kompilieren, man muss noch viel mehr Dinge verwalten. Wenn Sie jedoch eine Mauer brechen möchten, wählen Sie den Vorschlaghammer. Es ist keine Kritik, es ist ein gültiger Punkt. Das richtige Werkzeug für den richtigen Job.
Rustyshelf
54

Wir arbeiten seit fast 2 Jahren mit gwt zusammen. Wir haben viele Lektionen gelernt. Folgendes denken wir:

  1. Verwenden Sie keine Widget-Bibliotheken von Drittanbietern, insbesondere gwt-ext. Es wird Ihre Debugging-, Entwicklungs- und Laufzeitleistung beeinträchtigen. Wenn Sie Fragen dazu haben, wenden Sie sich direkt an mich.

  2. Verwenden Sie gwt, um nur die dynamischen Teile Ihrer Apps auszufüllen. Wenn Sie also komplexe Benutzerinteraktionen mit vielen Feldern haben. Verwenden Sie jedoch nicht die mitgelieferten Panels. Nehmen Sie die von Ihrem vorhandenen Stock Designer bereitgestellten Seiten. Schneiden Sie die Bereiche aus, die die Steuerelemente für Ihre App enthalten. Fügen Sie diese Steuerelemente der Seite in onModuleLoad () hinzu. Auf diese Weise können Sie die Standardseiten Ihres Designers verwenden und das gesamte Styling auch außerhalb des GWT ausführen.

  3. Erstellen Sie nicht die gesamte App als eine Standardseite, die dann alle Teile dynamisch erstellt. Wenn Sie das tun, was ich in Punkt 2 vorschlage, wird dies sowieso nicht passieren. Wenn Sie alles dynamisch erstellen, wird die Leistung beeinträchtigt und große Mengen an Speicher für mittlere bis große Apps verbraucht. Wenn Sie das tun, was ich vorschlage, funktioniert die Schaltfläche "Zurück" hervorragend, ebenso wie die Indizierung von Suchmaschinen usw.

Die anderen Kommentatoren hatten auch einige gute Vorschläge. Die Faustregel, die ich verwende, ist, Seiten zu erstellen, als ob Sie eine Standardwebseite erstellt hätten. Dann schnitzen Sie die Teile heraus, die dynamisch sein müssen. Ersetzen Sie sie durch Elemente mit IDs und RootPanel.get( id ).add( widget )füllen Sie diese Bereiche aus.

olibre
quelle
Ich habe eine Frage zu Ihrer Antwort unter stackoverflow.com/q/10025656/138585 geöffnet . Ich würde mich freuen, wenn Sie einen Blick darauf werfen können.
Elad
20

Fallstricke, auf die wir gestoßen sind:

  • Wenn Sie so etwas wie GWT EXT verwenden, können Sie zwar eine Menge Kilometer sammeln, aber jedes Mal, wenn Sie diese Art von dünnem Furnier über einer JavaScript-Bibliothek verwenden, verlieren Sie die Fähigkeit zum Debuggen. Mehr als einmal habe ich meinen Kopf auf den Schreibtisch geschlagen, weil ich (in meinem IntelliJ-Debugger) nicht überprüfen kann, was in der GWT EXT-Tabellenklasse passiert ... Sie können nur sehen, dass es sich um ein JavaScriptObject handelt. Dies macht es ziemlich schwierig herauszufinden, was schief gelaufen ist ...

  • Sie haben niemanden in Ihrem Team, der sich mit CSS auskennt. Aus meiner Erfahrung war es egal, dass die Person kein Experte war ... es reicht aus, dass sie über gute Kenntnisse verfügt und die richtigen Begriffe kennt, um bei Bedarf zu googeln.

  • Browserübergreifendes Debuggen. Behalten Sie den gehosteten Out-of-Process-Modus [ 1 ] [ 2 ] [ 3 ] im Auge , der hoffentlich in GWT 1.6 verfügbar ist ... Im Moment müssen Sie nur den gehosteten Modus verbessern und dann die Schaltfläche "Kompilieren / Durchsuchen" verwenden , wo Sie mit anderen Browsern spielen können. Wenn ich unter Windows arbeite, bedeutet dies, dass ich meine Arbeit in FireFox anzeigen und FireBug verwenden kann, um die Dinge zu optimieren und zu verbessern.

  • IE6. Es ist erstaunlich, wie unterschiedlich IE 6 die Dinge rendert. Ich habe den Ansatz gewählt, einen Stil gemäß dem Browser auf das äußerste "Ansichtsfenster" anzuwenden, damit ich CSS-Regeln haben kann wie:

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

Stellen Sie schließlich sicher, dass Sie einen Editor verwenden, der Ihnen hilft. Ich benutze IntelliJ - es hat viele GWT-Smarts. Wenn ich beispielsweise versuche, eine Klasse zu verwenden, die nicht von der JRE-Emulation verarbeitet wird, werden Sie darüber informiert. Wenn ich einen Stil für ein Widget angegeben habe und diesen Stil noch nicht definiert habe, wird der Code ein wenig rot ... Wenn ich mir das CSS anschaue, wird mir mitgeteilt, wann ich widersprüchliche Attribute in a angegeben habe einzelne Regel. (Ich habe es noch nicht ausprobiert, aber ich verstehe, dass Version 8 eine noch bessere GWT-Unterstützung bietet, z. B. die Synchronisierung der "lokalen" und "asynchronen" RPC-Schnittstellen und -Implementierungen.)

jgindin
quelle
18

GWT 2.0, das in den nächsten Monaten erscheinen soll, löst viele der diskutierten Probleme.

  • Erstellen Sie Layouts mit einer HTML / XML-ähnlichen Syntax
  • Dynamisches Laden von Skripten - Zunächst wird nur das erforderliche JS heruntergeladen. Der Rest wird nach Bedarf heruntergeladen
  • Gehosteter Modus im Browser - Hiermit werden unter anderem die Probleme mit der Geschwindigkeit des gehosteten Modus behoben
  • "Compiler Optimizations" - Hoffentlich schnellere Kompilierung

GWT 2.0-Vorschau-Video bei Google I / O.

Adam Albrecht
quelle
15

Nicht "unfähig, überwunden zu werden", sondern ein bisschen Schmerz für etwas Grundlegendes.

Datumsbehandlung:

GWT verwendet das Veraltete, java.util.Datewas zu unerwartetem Verhalten beim Umgang mit Daten auf der Clientseite führen kann. java.util.Calendarwird von GWT nicht unterstützt. Mehr Infos hier .

Verwandte Problembeispiele:

Jla
quelle
1
Zwei Jahre später, und das ist immer noch der Fall. Es bleibt ziemlich ärgerlich, wenn man auf dem Client Datumsberechnungen durchführt.
Joseph Lust
Das Problem ist die Übersetzung (Kompilierung) von java.util.Calendarnach JavaScript. Sie können sich auch die KlasseCalendarUtil des GWT ansehen : Wie verwende ich java.util.Calendar in GWT und wie führe ich Kalenderoperationen in Java GWT aus? Wie füge ich einem Datum Tage hinzu? . Prost;)
Olibre
10

Ich werde einige Punkte zu den bereits erwähnten hinzufügen:

  • Datenbindung / Validierung. GWT bietet keine sofort einsatzbereite Unterstützung für die Datenbindung / -validierung, obwohl sich in diesem Bereich einige Projekte abzeichnen. Sie werden feststellen, dass Sie viel davon schreiben:
TextField fname, faddress;
...
fname.setText (person.getName ());
faddress.setText (person.getAddress ());
...
  • Faules Laden. Da gwt auf der Clientseite ist, ist ein verzögertes Laden wirklich keine Option. Sie müssen Ihre RPCs und Domänenobjekte sorgfältig entwerfen, um dies zu tun
    • Senden Sie alle benötigten Objektdaten
    • Vermeiden Sie es, eifrig alle Ihre Daten abzurufen
    • Sie müssen auch sicherstellen, dass Sie keine Proxys / nicht serialisierbaren Objekte senden. hibernate4gwt kann Ihnen bei diesen Punkten helfen.
  • UI-Design. Es ist schwieriger, eine Benutzeroberfläche in Java (Bedienfelder, Schaltflächen usw.) als in HTML zu visualisieren.
  • Unterstützung der Historie. GWT wird weder mit einem Verlaufssubsystem noch mit einem Subsystem für nette URLs oder Statefull-Lesezeichen ausgeliefert. Sie müssen Ihre eigenen würfeln (obwohl es Unterstützung für Verlaufstoken gibt, was ein Anfang ist). Dies geschieht mit allen AJAX-Toolkits AFAIK.

Meiner Meinung nach fehlt GWT ein Framework, das alle in diesem 'Thread' genannten Probleme sofort unterstützt.

Miguel Ping
quelle
GWT wird mit einem Verlaufssystem geliefert, z. B. History.newItem ("myItem", false). fügt #myItem in die URL ein, um das Lesezeichen zu vereinfachen. Verwenden Sie einfach History.addValueChangeHandler (myHandlerMethod), um jemanden beim Laden eines Lesezeichens mit Ihrer App zu behandeln.
Ztranger
Es ist kein Verlaufssystem an sich, sondern nur ein Mechanismus zum Schreiben von Token in URLs und zum Behandeln von Benachrichtigungen über Tokenänderungen. Sie müssen weiterhin den gesamten App-Code schreiben, um die Verlaufsänderung zu verarbeiten.
Miguel Ping
9

Ich arbeite gerade an einem Projekt, das EXT GWT (GXT) verwendet, um nicht mit GWT EXT zu verwechseln. Es gibt einen Unterschied, EXT GWT ist derjenige, der tatsächlich von der Firma produziert wird, die ExtJS die Javascript-Bibliothek geschrieben hat. GWT EXT ist ein GWT-Wrapper um die ExtJS-Bibliothek. GXT ist native GWT.

Wie auch immer, GXT ist noch etwas unreif und es fehlt eine solide Community, die GWT EXT meiner Meinung nach hat. Die Zukunft liegt jedoch bei GXT, da es sich um ein natives GWT handelt, das tatsächlich von der Firma entwickelt wurde, die ExtJS hergestellt hat. GWT EXT ist etwas verkrüppelt, da sich die Lizenz für die ExtJS-Bibliothek geändert hat, wodurch die Entwicklung von GWT EXT verlangsamt wird.

Insgesamt denke ich, dass GWT / GXT eine gute Lösung für die Entwicklung einer Webanwendung ist. Eigentlich mag ich den gehosteten Entwicklungsmodus sehr, er macht die Dinge schnell und einfach. Sie haben auch den Vorteil, dass Sie Ihren Code auch debuggen können. Unit-Tests mit JUnit sind ebenfalls ziemlich solide. Ich habe noch kein großartiges JavaScript-Framework für Komponententests gesehen, das meiner Meinung nach ausgereift genug ist, um eine Unternehmensanwendung zu testen.

Weitere Informationen zu GWT EXT finden Sie unter: http://gwt-ext.com/

Weitere Informationen zu EXT GWT (GXT): http://extjs.com/products/gxt/

JP Richardson
quelle
1
Da diese Frage immer noch aktiv ist und Stimmen erhält, dachte ich, ich würde ein Update bereitstellen. Ich habe GXT (2009-2010) komplett fallen lassen, weil mir die Geschäftspraktiken von Sencha Inc nicht gefallen haben. Ich habe dann anschließend GWT über Bord geworfen. Ich hatte Angst, JavaScript zu verwenden, solange ich es hasse. Das heißt, bis ich es wirklich verstanden habe. Jetzt entwickle ich fast ausschließlich in Node.js / AngularJS. Wenn Sie Bootstrap 3 verwenden, können Sie in viel kürzerer Zeit als GWT eine fantastisch aussehende Website erstellen. Die Zukunft ist JavaScript. Je früher Sie es annehmen, desto besser werden Sie Entwickler.
JP Richardson
Was ist deine Meinung jetzt? (nur neugierig) Danke.
Akos Lukacs
1
@AkosLukacs Ich kann immer noch berichten, dass ich JavaScript verwende und jedes bisschen davon liebe! Wie gesagt, ich hasse JavaScript und deshalb habe ich mich für GWT entschieden. Die Realität ist, dass Sie JavaScript nicht vermeiden können, wenn Sie eine Webentwicklung durchführen. Sie können es also genauso gut annehmen. Ich habe mich ziemlich daran gewöhnt, JavaScript für alles zu verwenden (machte einen kleinen Umweg mit Go). Für meinen Stack verwende ich Node.js / Express / React. Ich bin ein großer Fan von Angular und kenne es ziemlich gut, aber ich kann Angular 1.x niemandem empfehlen, der mit JS beginnt, da die Lernkurve zu hoch ist.
JP Richardson
5

Keine großen Fallstricke, die ich nicht so einfach überwinden konnte. Verwenden Sie den gehosteten Modus stark. Da Sie GWT-ext verwenden, müssen Sie CSS fast nie selbst berühren, es sei denn, Sie möchten den Out-of-the-Box-Look optimieren.

Meine Empfehlung ist, ein "natives" GWT-Widget über einer Bibliothek zu verwenden, in der die Funktionen nahe beieinander liegen.

Indizierung von Suchmaschinen: Ja, die Website verfügt normalerweise nicht über navigierbare URLs (es sei denn, Sie fügen nur Elemente einer regulären Website Widgets hinzu). Sie können jedoch die Vorwärts- / Rückwärtsfunktion des Verlaufs ausführen.

Michael Neale
quelle
4

Ich habe GWT und GWT-ext vor einiger Zeit zusammen für ein Projekt verwendet. Ich fand die Erfahrung im Verlauf der Webentwicklung recht reibungslos, aber mein Rat wäre folgender:

Mischen Sie keine nativen GWT-Widgets mit EXT-Widgets. Es ist verdammt verwirrend, da die Namen normalerweise gleich sind (GWT.Button oder GWText.Button?)

Eine Sache, die mir passiert ist und die den Code wirklich komplexer gemacht hat, als ich es gerne hätte, war, dass ich ein Panel wollte, das a) dynamisch aktualisierbar b) kaskadierbar ist

Native GWT-Panels sind dynamisch, Ext-Panels sind kaskadierbar. Lösung? Ein GWT.VerticalPanel, das ein GWTExt-Panel umhüllt ... Chaos. :) :)

Aber hey, es funktioniert. ;)

As
quelle
4

Ich stimme dem Kommentar von ykagano zu, der größte Nachteil ist der Verlust des V in MVC. Obwohl Sie die wahre UI-Klasse vom Rest Ihres clientseitigen Codes trennen können, können Sie eine von einem Grafik- / Webdesigner generierte HTML-Seite nicht einfach verwenden. Dies bedeutet, dass Sie einen Entwickler benötigen, um HTML in Java zu übersetzen.

Holen Sie sich einen wysiwyg ui-Editor, der Ihnen viel Zeit spart. Ich benutze GWTDesigner.

Der größte Vorteil von GWT besteht darin, dass Sie browserübergreifende Probleme vergessen können. Es ist nicht 100%, nimmt aber fast den ganzen Schmerz weg. In Kombination mit dem Vorteil des Debuggens im gehosteten Modus (im Gegensatz zu Firebug, das ausgezeichnet ist, aber nicht mit einem Java-Debugger identisch ist) bietet es dem Entwickler einen großen Vorteil bei der Generierung komplexer Ajax-Apps.

Oh, und es ist schnell zur Laufzeit, besonders wenn Sie einen GZIP-Filter verwenden.

Steve Buikhuizen
quelle
1
Ich wusste nichts über den GZIP-Filter - danke für diesen Leckerbissen.
Agartzke
4

Etwas abseits des Themas, aber der # gwt-Kanal auf irc ist sehr hilfreich, falls Sie ein anhaltendes Problem haben.


quelle
Auf welchem ​​IRC-Netzwerk befindet sich der Kanal?
tovare
Es ist auf freenode (irc.freenode.net). Und es ist eigentlich ## gwt, aber Sie werden weitergeleitet, wenn Sie #gwt eingeben.
Stian
4

GWT ist ziemlich einfach und intuitiv.

Insbesondere mit der Veröffentlichung von UIBinder, mit dem GWT-Widgets in XML angelegt und anschließend in Java codiert werden können.

Wenn Sie also andere Ajax- oder Flash-Designtools oder Silverlight usw. verwendet haben, ist GWT sehr einfach zu erlernen.

Die größte Hürde, wenn nicht sogar die Gefahr, ist GWT RPC. Der Grund, warum Sie GWT verwenden möchten, ist der asynchrone GWT-RPC. Andernfalls können Sie sich beim Formatieren Ihrer Seite einfach auf CSS verlassen.

GWT RPC ist das Element, mit dem Ihr Server Daten auf Ihrem Server aktualisieren kann, ohne die Seite aktualisieren zu müssen. Dies ist eine unabdingbare Voraussetzung für Seiten wie die Überwachung der Aktienperformance (oder die aktuelle Staats- und Staatsverschuldung der USA oder die Anzahl der ungeborenen Babys, die weltweit sekundenweise abgebrochen werden).

GWT RPC braucht einige Mühe, um es zu verstehen, aber nach ein paar Stunden sollte alles klar sein.

Darüber hinaus stellen Sie nach einigen Anstrengungen zum Erlernen von GWT RPC schließlich fest, dass Sie JSPs nicht als Servicekomponente für RPC verwenden können, es sei denn ... Ich habe eine 8-teilige (glaube ich) Serie in meinem Blog über die Verwendung von JSP als GWT RPC-Servicer. Da Sie jedoch nicht um Antworten, sondern nur um Probleme gebeten haben, werde ich auf die Werbung für meinen Blog verzichten.

So. Ich bin der festen Überzeugung, dass die schlimmsten Hindernisse / Fallstricke bei der Verwendung von GWT darin bestehen, herauszufinden, wie GWT async RPC ordnungsgemäß bereitgestellt und JSP-Servicer verwendet werden können.

Gesegneter Geek
quelle
Ich möchte einen Link zu Ihren Blog-Artikeln;)
ms-tg
h2g2java.blessedgeek.com
Seliger Geek
3

Es fiel uns sehr schwer, unsere GWT-Codebasis mit HTML-Webvorlagen zu verbinden, die wir von einem Webdesigner erhalten haben (statische HTML-Seiten mit bestimmten Div-IDs, die GWT verwalten soll). Zumindest als wir es verwendeten, konnten wir GWT nicht dazu bringen, sich in Teile unserer Website zu integrieren, die nicht in GWT codiert waren. Wir hatten es irgendwann zum Laufen gebracht, aber es war ein großer Hack.

ykaganovich
quelle
3
  • Die Async-Schnittstelle, die Sie für jede Service-Schnittstelle schreiben müssen, sieht aus wie etwas, das vom GWT-Compiler automatisch generiert werden könnte.
  • Die Kompilierungszeiten für große Projekte werden lang

Aber für ein großes Javascript-Projekt ist es die beste Wahl


quelle
3

GWT 2.4 hat viele der oben genannten Probleme behoben und eine großartige Widget-Bibliothek kommt gerade aus der Beta (Ext GWT 3.0.4 aka GXT) heraus, die vollständig in GWT geschrieben ist und kein Wrapper einer JS-Bibliothek ist.

Verbleibender Schmerz:

  • Mangels CSS3-Selektorunterstützung können Sie in einigen Fällen "literal ()" verwenden, um dies zu umgehen.
  • Mangelnde Unterstützung für CSS3 und moderne Browserereignisse wie TransitionEnd .
  • Fehlende Unterstützung für Java Calendar-Klassen (viele Jahre später).
  • Fehlende JUnit4-Unterstützung (5 Jahre und Zählung).
  • Fehlen einer klaren Roadmap und eines Veröffentlichungsplans des Google GWT-Teams.
Joseph Lust
quelle
2

In Bezug auf GWT 2.4 verwenden Sie Firefox beim Debuggen von GWT, es ist viel schneller als die Verwendung von Chrome. Wenn Sie nur Firefox verwenden, sollten Sie diese Zeile in Ihre Datei project.gwt.xml einfügen

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

Wenn Sie Eclipse verwenden, fügen Sie unter Argumente -> VM-Argumente Folgendes hinzu:

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

Sie können Ihren Server und Client teilen und unter Argumente -> Programmargumente Folgendes verwenden: -codeServerPort 9997 -startupUrl http: // yourserver / project -noserver

Verwenden Sie JRebel http://zeroturnaround.com/blog/how-to-rock-out-with-jrebel-and-google-web-toolkit-gwt/ , um zu verhindern, dass Ihr Server bei jeder Änderung aktualisiert wird. Und hier ist eine Live-Demo http://www.youtube.com/watch?feature=player_embedded&v=4JGGFCzspaY

Gal Bracha
quelle
1

Eine große Gefahr besteht darin, dass Sie manchmal explizit eine ID dem HTML-Element zuweisen müssen, um bestimmte CSS-Stile verwenden zu können. Beispiel: Ein GWT-TabPanel führt nur Folgendes aus: Bewegen Sie den Mauszeiger über tabBarItems, wenn der tabBar des tabPanel eine ID zugewiesen wurde und Sie einen: Hover auf dieser Element-ID angeben.

Ich habe an anderer Stelle über einige andere Nachteile von GWT geschrieben , aber sie werden bereits durch die Antwort von rustyshelfs abgedeckt :).

Verwirrtheit
quelle
Im Allgemeinen ist das Zuweisen von IDs keine schlechte Sache, wenn Sie einen Test mit Selen durchführen möchten.
Petteri Hietavirta
1

Ich habe in letzter Zeit viel an GWT gearbeitet, und das muss ich sagen:

  1. CSS-Styling ist nur manchmal schwierig. Verwenden Sie das IE-Entwicklertool im IE und Firebug in Firefox, um herauszufinden, was genau passiert, und Sie erhalten eine klare Vorstellung davon, welche CSS geändert werden müssen
  2. Sie können Tricks verwenden, um Google dazu zu bringen, es zu indizieren. Eine sehr berühmte Website ist http://examples.roughian.com/. Überprüfen Sie die Bewertungen bei Google. Eine weit weniger berühmte Seite ist www.salvin.in (konnte nicht widerstehen, das zu erwähnen), ich habe es auf Wörter optimiert: salvin home page (Suche bei Google nach diesen drei Wörtern)

Ich weiß nicht viel über GWT-EXT, aber auch ich bin der Überzeugung, dass es nicht notwendig ist, Bibliotheken von Drittanbietern einzuschließen.

Viel Glück bei Ihrer Entscheidung :)

Salvin Francis
quelle
1

GWT führt Browser-Sniffing anstelle der Funktionserkennung durch und Ihre Anwendung funktioniert auf einigen Browsern (insbesondere neuen) nicht.

Hier sind einige Hinweise auf das Problem:

Hier einige Hinweise zur Funktionserkennung:

Auszug aus dem Vergleich von JavaScript-Frameworks - Wikipedia

Eduardo
quelle
1

Das GWT-Team hat im Vergleich zur Veröffentlichung von GWT 2.7 im letzten Jahr viele großartige Verbesserungen vorgenommen. Eine große Schwäche von GWT war, dass die Kompilierung in GWT 2.6 und darunter zu lange dauert. Dies ist jetzt weg GWT hat keine inkrementelle Kompilierung, die superschnell ist und nur die Änderungen kompiliert.

GWT 2.7 hat jetzt ( Quelle ):

  • Inkrementelle Builds jetzt nur noch Sekunden
  • Kompaktere, genauere SourceMaps
  • GSS-Unterstützung
  • JSInterop
  • Hervorragende JavaScript-Leistung
  • Kleinere Codegröße
konfile
quelle
1

Der beste Weg, um verlässliche Fakten zu erhalten, ist das Denken Sie daran, dass Sie js in GWT jederzeit verwenden können. Wenn Sie also mit GWT zu kämpfen haben, sollten Sie js verwenden. Am Ende des Tages ist GWT js, so dass Sie in GWT alles tun können, was Sie in js können. Tatsächlich verwenden die meisten GWT-Projekte js. Das Problem ist, dass GWT drastisch komplizierter ist. Trotzdem ist es manchmal die zusätzliche Komplexität wert. GWT-Umfrage . Eines der größten Probleme mit GWT war immer eine lange Kompilierungszeit. Glücklicherweise verbessert es sich sehr schnell, so dass es in naher Zukunft kein bedeutendes Problem sein wird. Eine weitere Gefahr besteht darin, dass GWT dramatisch komplizierter ist, da Java eine kompliziertere Sprache ist, die schlechten Codierern bei jedem Schritt des Weges widersteht. Darüber hinaus wird beim Kompilieren eine Ebene hinzugefügt. Zum Beispiel benötigt js interop eine kleine Boilerplate. Das grundlegende Problem ist, dass GWT nicht einfach gestaltet wurde. Es wurde von Grund auf für extrem komplizierte Web-Apps entwickelt und die gesamte Community priorisiert konsequent Leistung, Codequalität, Architektur usw. gegenüber einfacher Codierung.

Es ist erwähnenswert, dass GWT 3.0 massive Verbesserungen bringen wird.

jgleoj23
quelle
0

Wiederverwendung von RPC-Dienstobjekten.
Es verursacht Rennbedingungen mit Symptomen, die aussehen, als würde die App hängen.

antony.trupe
quelle
Antony, könnten Sie das näher erläutern? Ich mache einen RPC-Aufruf an den Server und erwarte, dass die GUI reagiert, bis die Anforderung zurückkommt, aber sie scheint zu hängen.
Brett Hannah
0

Fallstricke, auf die ich gestoßen bin 1. Unterschiedliches Verhalten im Superdev-Modus. Zum Beispiel funktioniert Someclass.class.getName () im Superdev-Modus einwandfrei und gibt den vollständig qualifizierten Namen der Klasse zurück. Im produktiven Modus funktioniert dies nicht.

  1. addWidget (Widget) ruft den removefromparent () des Widgets auf.
Marcel Pater
quelle
0

GWT ist ein technologisches Meisterwerk. Es vereint Client- und Server-Programmierung und macht es zu einer zusammenhängenden Anwendung - der Art und Weise, wie Software vor dem "Layering" geschrieben wurde und wie sie geschrieben werden sollte. Es eliminiert unterschiedliche Fähigkeiten, Missverständnisse zwischen Teammitgliedern und im Allgemeinen die gesamte Webdesign-Phase: sowohl die künstlerische als auch die Programmierphase. Und es ist am nächsten an der mobilen Entwicklung, z. B. der Android-Entwicklung. Tatsächlich wurde GWT entwickelt, um verschiedene native Benutzeroberflächen zu generieren, nicht nur HTML. Es erfordert jedoch enorme Disziplin, um eine solche Entkopplung sicherzustellen - um Ihre inneren Schichten präsentationsunabhängig zu halten.

Der erste Fehler, den Sie vermeiden sollten, für dessen Realisierung ich vier Jahre gebraucht habe, ist die Verwendung von Erweiterungen von Drittanbietern wie EXT-GWT, auch bekannt als GXT und SmartGWT. Es ist sehr verlockend, ihre hübschen Desktop-Widgets zu verwenden, anstatt in Ihr eigenes Styling zu investieren, aber ich kann nicht sagen, wie viele Probleme ich mit SmartGWT hatte, bis ich endlich die Nase voll hatte. Kurz gesagt, es friert die GWT-Kernfunktionen auf der bestimmten (ziemlich veralteten) Ebene ein und baut darauf auf. Denken Sie auch daran, dass das gemeißelte Desktop-Erscheinungsbild heutzutage albern aussieht, ganz zu schweigen von der schleppenden Leistung, den unzähligen Fehlern und den Kompatibilitätsfunktionen - insbesondere auf Mobilgeräten. Sie möchten so nah wie möglich an den nativen Browser-Steuerelementen bleiben, dh Dropdowns, die als native <select> -Elemente gerendert werden, nicht als benutzerdefinierte Steuerelemente.

Dank mobiler Trends wird die gesamte UX einfacher und flacher, sodass Sie nicht viel tun müssen, um eine scharf aussehende Anwendung zu gestalten. Wenn Sie einen "3D" -Look wünschen, gibt es auch Farbverläufe. CSS3 hat alles einfach gemacht, und GWT verpackt es im Gegensatz zum rohen CSS elegant und objektorientiert. Lassen Sie sich also nicht entmutigen, wenn Sie sich die hässlichen Barebone-Steuerelemente im GWT Showcase ansehen. Das GWT-Team hat absichtlich kein Styling angeboten, weil es die Aufgabe des Entwicklers ist.

Der Rest ist so ziemlich die konventionelle Browserprogrammierung in stark typisiertem Java mit schönen, prägnanten APIs. Aber natürlich vergessen Sie nie, dass Ihr Code im Browser ausgeführt wird. Daher sind alle Aufrufe asynchron, z. B. können Sie GWT-RPC-Methoden nicht in einer Schleife aufrufen (um eine Liste zu füllen), sondern müssen sie rekursiv verketten, wenn Sie jemals dazu kommen Lage.

Es gibt einige selbsternannte "Anti-Patterns", die GWT-RPC nicht verwenden. Bisher war es gut für mich: seit 10 Jahren. Einfachheit ist der Schlüssel. Ich würde nicht einmal eine Sekunde denken, um eine marginale Leistung für Code-Eleganz und Wartbarkeit zu opfern. Außerdem wären hier nicht Ihre Engpässe - in der Datenbank. Beachten Sie natürlich, wie viele Daten Sie an den Client senden.

Und wenn Sie das vorhandene Gadget nicht finden oder formatieren können - lesen Sie den umfangreichen HTML5-Elementsatz -, können Sie jederzeit einen von Drittanbietern umschließen. Ich habe es mit einem beliebten jQuery FullCalendar gemacht. Überhaupt keine Raketenwissenschaft. Alles andere wie Google Maps und Google Charts verfügt über halboffizielle GWT-Wrapper.

GWT ist perfekt. Der einzige Grund, warum es nicht genug Liebe bekommt, ist, dass frühe Internet-Anwender, die immer noch Einfluss auf die Branche haben, nicht aus der Informatik und objektorientierten Sprachen kamen, um sie zu schätzen. Sie haben entweder künstlerischen (Photoshop / WordPress) oder Netzwerk-Hintergrund (Perl / Python).

Alex Rogachevsky
quelle