Batterien enthalten
Java's Tooling
Es ist einfach großartig:
- IDEs: Auch wenn einige IDEs JavaScript unterstützen, ist der Grad der Unterstützung einfach nicht vergleichbar. Versuchen Sie, JavaScript-Code auf großen Codebasen (z. B. 40 KB + LOC) umzugestalten, und weinen Sie.
- Unit-Testing: Obwohl dies in den letzten Jahren zugenommen hat, ist es auch in der Java-Welt viel ausgereifter.
- Kontinuierliche Integration und kontinuierliche Inspektion
- Dokumentationserstellung: Sicher haben Sie JSDoc und einige andere
Statische Typisierung
Es fängt Fehler früh ab. (Google Closure spricht dies ein wenig an, während der Entwickler in der JavaScript-Welt bleibt, wenn Sie dies bevorzugen.)
Optimiertes JavaScript
GWT schreibt schneller und kompakteres JavaScript als Sie (für große Anwendungen) und ermöglicht es Ihnen, festzustellen, was an den Client gesendet wird, wahrscheinlich einfacher als mit gleichwertigen vollständigen JS-Lösungen.
Die Architektur
Es bietet eine gute Trennung von Bedenken für große Anwendungen, da anständige MVC- oder MVP-Architekturen bereits an Ihren Fingerspitzen vorgebacken sind.
Anständige Bibliothek
GWT bietet interessante Bibliotheken und erleichtert das Erstellen von I18N-fähigen Anwendungen mit dynamischem Bundle-Laden.
Unit-Testing
Verwenden von JUnit in der Eclipse-IDE und über die Befehlszeile. Dies bezieht sich auf meinen ersten Punkt. Sie können auch einige der Java-Tools für die Codequalität in einem GWT-Projekt verwenden (für Quellcodeprüfungen, nicht für Bytecodeprüfungen, da keine vorhanden sind).
Es geht nur um dich!!
GWT ist nicht jedermanns Sache. Es macht einige Leute produktiver und bietet ein gutes Tool für Nicht-JS-Entwickler, um professionelle Web-Apps mit dynamischen Frontends zu erstellen, ohne (zu viel) JavaScript zu berühren. Aber wenn es bei Ihnen nicht funktioniert, verwenden Sie einfach etwas anderes.
Wenn Sie das meiste davon möchten, aber kein Java möchten, schauen Sie sich vielleicht Google Closure oder das Dojo Toolkit an .
War damals eine gute Idee: Geschichte ist wichtig !!
Die JavaScript-Welt (und die Web-Front-End-Technologien im Allgemeinen) sind heutzutage äußerst aktiv, daher sieht es gut aus. Aber erst vor ein paar Jahren waren die Dinge nicht so hell. WENIGER / SASS waren nicht so beliebt, jQuery war noch nicht die werkseitige JS-Bibliothek, JavaScript-Bibliotheken wurden nicht alle zwei Wochen erstellt und die Tools waren im Allgemeinen nicht so gut.
Es gab jedoch bereits eine wachsende Nachfrage nach professionellen und großen Webanwendungen mit dynamischen Frontends. Daher musste eine Lücke geschlossen werden, um die Produktivität der Entwickler zu steigern. JavaScript hat eine Menge Fallstricke und Kuriositäten, die Sie beachten müssen, und vielleicht ist es einfach besser, sich nicht einmal darum zu kümmern. Daher die Nische für Tools wie GWT.
Seitdem sind andere erschienen (CoffeeScript fällt mir ein, Dart ist auf dem Weg, aber auch große JavaScript-Frameworks, die Revolution der serverseitigen JS mit Node.JS und anderen und ein starkes Comeback für JavaScript als "gut genug" -Rundsprache, die nicht nur auf der Clientseite, sondern auch in anderen Teilen Ihres Business Stacks verwendet werden kann.
Zusätzliche Bemerkungen
In Bezug auf Ihre ursprüngliche (jetzt bearbeitete) Frage zur Verwendung von Firebug
Sie können GWT-Code natürlich mit Firebug debuggen, aber im Idealfall würden Sie ihn direkt über den Debugger der Eclipse IDE debuggen, der jetzt Unterstützung für das Debuggen von Live-Code bietet.
Firebug ist jedoch weiterhin verwendbar, obwohl Sie berücksichtigen müssen, dass GWT optimiertes und komprimiertes JavaScript generiert, das möglicherweise nicht so einfach zu debuggen ist.
In Bezug auf Ihre ursprüngliche (jetzt bearbeitete) Frage zu CSS
Ja, Sie müssen den CSS-Code natürlich noch selbst schreiben. Sie koppeln Ihr GWT-Projekt jedoch mehr oder weniger einfach mit anderen Tools (wie SASS).
Es ist nur ein Werkzeug!
Verwechseln Sie GWT nicht mit dem, was es nicht ist: Sie schreiben keinen Java-Code, der direkt auf der Clientseite als Java-Bytecode ausgeführt wird. Sie schreiben Code in der Java-Sprache, der dann aus Effizienzgründen in JavaScript übersetzt wird und Ihnen die Verwendung einer höheren Sprache ermöglicht (oder zumindest so gesehen werden soll).
Wohl könnten Java und JavaScript als vergleichbar im Hinblick auf den Abstraktionsebenen betrachtet werden. Java bietet jedoch einige Vorteile (siehe oben), daher der Vorteil, die Vorteile vorhandener Tools zu nutzen, ohne sie neu schreiben zu müssen. Die Entwickler von Google hatten gerade die clevere Idee, vorhandene Java-orientierte Tools wiederzuverwenden, aber tatsächlich JavaScript-Anwendungen zu entwickeln.
Darüber hinaus lösen sie ein weiteres Problem, nämlich die oft umständliche Verwaltung von zweisprachigen Webanwendungen, bei denen JavaScript und Java-Code getrennt behandelt wurden. Die Verwendung von GWT ermöglicht ein gewisses Maß an Konvergenz für beide Seiten des Entwicklungsprozesses.
Weiterführende Literatur:
Nachdem ich jahrelang eine Webanwendung in GWT entwickelt habe, bin ich der Meinung, dass GWT so schwerwiegende Nachteile hat, dass ich sie nie wieder verwenden würde, wenn ich nicht dazu gezwungen wäre.
DOM-Baum
Während die JavaScript-Leistung möglicherweise besser ist, ist der gerenderte DOM-Baum häufig unnötig komplex. Beispielsweise verwendet die Tree-Implementierung mehr als 13 DOM-Elemente, einschließlich einer <Tabelle> für jedes einzelne Element. Die Verwendung großer Bäume (ca. 10000 Elemente) friert den Browser einfach ein. Ein reiner JavaScript / HTML / CSS-Baum konnte die gleiche Anzahl von Elementen problemlos verarbeiten.
Entwicklung
Der Änderungszyklus einer reinen JavaScript / HTML / CSS-Quelle ist unschlagbar. Sie speichern einfach Ihre Quelldatei und aktualisieren die Seite im Browser. Dies ist ein Schlüsselfaktor für die Produktivität und GWT kann selbst mit dem Code-Server nicht mithalten.
Das Debuggen von JavaScript ist mit dem Debugger von Chrome oder Firebug absolut einfach und angenehm.
Hammer Experten
Die Idee, Java für alles zu verwenden, ist für Entwickler, die "Hammer-Experten" sind. Sie sind Meister ihres Hammers, also ist alles ein Nagel. Ich denke, dieser Ansatz ist sehr falsch. Die Verwendung von GWT erfordert auch Kenntnisse in CSS und HTML. Ohne dies stoßen GWT-Entwickler häufig auf Probleme, die sie kaum lösen können, während jemand mit HTML / CSS-Erfahrung eine Lösung finden kann. Wenn die Entwickler diese Kompetenz benötigen, können sie die Entwicklung in HTML vereinfachen.
Meiner Meinung nach sind die meisten Vorteile von GWT zumindest fraglich, während die Nachteile im Vergleich zur Entwicklung in reinem JavaScript / HTML / CSS weitaus schwerwiegender sind.
quelle
Es ist nicht messbar besser.
Für den täglichen Gebrauch in Betracht ziehen jQuery , AmpleSDK oder eine HTML5-Polyfüllung .
GWT hat viel Aufwand: tatsächlich und konzeptionell.
Könnte nützlich sein, wenn Sie eine Java-App oder einen serverseitigen Java-Code zum Portieren haben auf ein Web-Frontend haben.
quelle
Einige Vorteile der Verwendung von GWT, an die ich denke (weitere Informationen finden Sie in meinem Blog unter http://www.pandurangpatil.com/2012/09/benefits-of-using-gwt.html) ).
Da die GWT-Clientanwendung in Java geschrieben ist, besteht die Möglichkeit, beim Kompilieren syntaktische Fehler zu erkennen (obwohl sie nicht alle JRE-Klassen unterstützt, da diese Funktionen nicht von den Browsern selbst unterstützt werden). Nehmen wir ein Beispiel, um zu verstehen, was ich sage. Wenn Sie einen JavaScript-Variablennamen mithilfe einer reinen JavaScript-Bibliothek falsch schreiben. Die einzige Möglichkeit, einen solchen Fehler zu erkennen, besteht darin, die Anwendung auszuführen und auf die gewünschten Ergebnisse zu testen. Java-Funktionen wie Generics und Annotations werden vollständig genutzt und können in Ihrer Anwendung verwendet werden.
Sie können vorhandene verfügbare Bibliotheken verwenden oder eine schreiben, um Code gemäß den Anforderungen problemlos zu generieren, da der zu generierende Code in Java vorliegen muss. Der GWT-Compiler kümmert sich um das Kompilieren und Konvertieren in JavaScript.
Die Verwaltung von Code wird einfacher.
Man kann einfach eine allgemeine Geschäftslogik so schreiben, dass sie im clientseitigen GWT-Code und auch im serverseitigen Code wie in Java verwendet werden kann, z. B. bei der Validierung von Daten oder einigen allgemeinen Dienstprogrammfunktionen.
Mit dem GWT Eclipse-Plug-In können Sie den Clientcode in Java problemlos für Ihre Geschäftslogik debuggen.
Als GWT-Compiler kompiliert Ihr Client Java-Code und generiert daraus JavaScript. Was Sie benötigen, um es auf Ihrem Server bereitzustellen, und es wird auf Anfrage im Benutzerbrowser bereitgestellt und ausgeführt. Beim Generieren dieses JavaScript werden einige Optimierungen vorgenommen.
Beim Generieren von JavaScript wird toter Code nicht berücksichtigt. Wenn ich toten Code sage, meine ich "Code, der vorhanden ist, aber nicht vom Hauptfluss aufgerufen wird". Dies reduziert wiederum die effektive Größe Ihres endgültigen JavaScript-Codes.
Es kümmert sich um die Verschleierung des generierten JavaScript-Codes.
Der generierte JavaScript-Code wird minimiert.
Und was noch wichtiger ist, es wird separat browserspezifisch optimierten Code generiert. Wenn ich separat sage, wird ein browserspezifisches separates JavaScript generiert, das bereitgestellt wird, wenn eine entsprechende Anfrage von einem bestimmten Browser eingeht. Dies reduziert wiederum die Größe des JavaScript-Codes, der für einen bestimmten Browser heruntergeladen wird, da er nicht die gesamte browserspezifische Behandlung in einem einzigen Code enthält.
Wenn Sie Ihre Bewerbung für verschiedene Sprachen schreiben, z. B. Englisch, Hindi, Marathi usw., verwenden Sie die Internationalisierungsfunktion von GWT. Beim Generieren von JavaScript-Code wird eine Kopie pro Sprach- und Browserkombination erstellt. Dies macht den generierten JavaScript-Code für eine bestimmte Kombination aus Sprache und Browser optimal und klein.
Wenn Sie direktes JavaScript verwenden müssen, das aus Java GWT-Code aufgerufen werden kann, können Sie dies mit JSNI (JavaScript Native Interface) tun. Man kann sogar GWT Java Code von JavaSctipt zurückrufen.
Wenn Sie Lesezeichen-fähige Seiten erstellen möchten, können Sie die Verlaufsfunktion von GWT verwenden.
Wenn Sie JSON als Datenformat für die Kommunikation und Bearbeitung verwenden möchten, verfügt es über eine sehr gute Funktion namens JavaScript-Überlagerungstypen.
Die verzögerte Bindungsfunktion von GWT ist eine gute Funktion, die aufgrund von Java vermutlich bereitgestellt werden kann.
Sie können Ihre Benutzeroberfläche mit verfügbaren GWT-Widgets im Java Swing-Stil erstellen. Sie können sogar ganz einfach Ihre benutzerdefinierten Widgets erstellen.
Wenn Sie Ihre Benutzeroberfläche (Webseiten) im reinen HTML-Stil erstellen möchten, können Sie die deklarative Benutzeroberfläche von GWT verwenden. Was ich für eines der Hauptmerkmale von GWT halte. Dies erleichtert Entwicklern das Erstellen von Seiten im reinen HTML-Stil. Was meiner Meinung nach wartbarer ist als die Codierung im Swing-Stil. Und am wichtigsten ist, dass Sie Ihre Logik immer noch in Java und nur den Präsentationsteil in reinem HTML haben können. (Hinweis: Welche Methode Sie auch verwenden (deklarative Benutzeroberfläche oder Swing-Stil), es wird letztendlich nur HTML sein, aber was den Unterschied ausmacht, ist die Art und Weise, wie Sie sie codieren und pflegen.)
Die Client Bundle-Funktion von GWT erleichtert die Verwaltung Ihrer anderen Webressourcen wie CSS, Bilder und anderer Textinhalte.
Zellen-Widgets: Um die paginierte Datenerfassung darzustellen, verfügt GWT über Zellen-Widgets. Es gibt Widgets wie CellTable, CellList, CellTree und CellBrowser.
Kommunikation mit dem Server über den GWT-Clientcode. Es werden mehrere Möglichkeiten zur Implementierung der Client-Server-Kommunikation unterstützt.
Wenn Sie nicht über das Protokoll besorgt sind, das für die Datenübertragung verwendet wird, dann ist es der GWT-RPC-Mechanismus. Es ist sehr einfach, Ihren clientseitigen Code für die Datenübertragung mit dem Server zu integrieren. Sie können benutzerdefinierte DTOs (Datenübertragungsobjekt) im Clientcode definieren, die sogar für serverseitigen Code verwendet werden können. Die serverseitige Implementierung akzeptiert dieselben DTOs als Parameter oder Rückgabewert. Alles andere erledigt GWT RPC Frame Work. Es werden sogar Ausnahmen vom serverseitigen Code an den Aufrufer im clientseitigen Code weitergegeben (vorausgesetzt, Sie müssen diese Ausnahmeklassen im clientseitigen Codepaket definieren. GWT RPC verwendet intern AJAX-Aufrufe mit einem eigenen benutzerdefinierten Protokoll für die Datenübertragung.
Wenn Sie GWT RPC nicht verwenden möchten, können Sie Server-AJAX-Aufrufe ausführen, um Daten mit dem Request Builder vom Server abzurufen. Welches ist auch viel einfacher zu implementieren. Es hat auch interessante Funktion Request Factory. Mit dieser Funktion können Sie Ihre DAO- oder Service-Schicht so verfügbar machen, dass sie vom Client-Code aufgerufen wird. Dazu müssen Sie einige Schnittstellen für Ihren Dienst und benutzerdefinierte Datentypen definieren. Über diese Schnittstellen können Sie über den Clientcode auf diese Dienste zugreifen. Ich habe ein Maven-Plugin geschrieben, um diese Schnittstelle zu generieren. Wenn Sie Ihre DAO-Ebene mit einigen erforderlichen Anmerkungen versehen, lesen Sie ( https://github.com/pandurangpatil/gwt-mvn-helper)) Verwenden Sie das darin enthaltene mvn-helper-test-Modul zur Verwendung. Request Factory ist gezielter auf die Integration in ORM-Schichten wie JDO oder JPA auf dem Server ausgerichtet. Es gibt eine Unterstützung für den Aufruf persist für eine bestimmte Entität aus dem Clientcode. Und am wichtigsten ist, wenn Sie die persist-Methode aufrufen, dass sie nur Änderungen (Delta) zum Speichern berechnet und an den Server sendet.
Wenn Sie einen domänenübergreifenden JSONP-Aufruf durchführen möchten, können Sie dasselbe tun.
quelle