Was sind nachgewiesene Vorteile von Tools wie GWT gegenüber reinen JavaScript-Frameworks?


11

GWT ist ein Software-Stack, der Java-Code und eine Teilmenge der Klassenbibliothek von Java Runtime in JavaScript-Code übersetzt.

Im Vergleich zu JavaScript-Toolkits kann GWT von Natur aus und von Natur aus entfremdend und zu komplex erscheinen, um selbst einfache Dinge zu erledigen, und einen Großteil der fein abgestimmten Kontrolle verlieren, die Sie durch die direkte Verwendung von JavaScript hätten.

Warum sollte sich ein Webentwickler für ein Tool wie GWT entscheiden, das eine Sprache verwendet, die ursprünglich nicht für das Web bestimmt war, anstatt reine JavaScript- und JavaScript-Frameworks und -Toolkits zu verwenden?

Ist es messbar besser und basiert auf welchen Kriterien?

Antworten:


27

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:


"Java und JavaScript könnten in Bezug auf die Ausdruckskraft als vergleichbar angesehen werden." Scherz? Die äquivalente Funktionalität in Java ist ungefähr fünfmal so lang.
Kevin Cline

@kevincline: Richtig, ich wollte keine Ausdruckskraft schreiben, ich meinte es mit Abstraktionsebenen. Vielen Dank für das
Erkennen

6
@kevincline: Plus ich sagte "streitbar", und eingefleischte Fanatiker der einen oder anderen Sprache würden alles streiten :)
Haylem

1
Zusätzlich zu den Elementen von @ Halem würde ich einfügen, dass das prototypbasierte OO von JavaScript für jemanden, der aus einem klassenbasierten System wie Java stammt, etwas seltsam sein kann. Konsistenz des Ansatzes ist oft nützlich.
Matthew Flynn

@MatthewFlynn: und umgekehrt: Deshalb fällt es reinen JS-Entwicklern definitiv schwerer, in den GWT-Zug einzusteigen oder schwerere Frameworks zu verwenden, die mehr oder weniger ein klassenbasiertes OO-Paradigma replizieren.
Haylem

6

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.


2

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.


Du meinst ClojureScript. Clojure selbst ist eine LISP-basierte Sprache, die auf die JVM abzielt. ClojureScript ist derjenige, der JS-Code erzeugt.
Haylem

Ja, hatte das sowieso schon herausgeschnitten. Einfach halten.
ZJR

2

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) ).

  1. 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.

  2. 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.

  3. Die Verwaltung von Code wird einfacher.

  4. 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.

  5. Mit dem GWT Eclipse-Plug-In können Sie den Clientcode in Java problemlos für Ihre Geschäftslogik debuggen.

  6. 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.

  7. 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.

  8. 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.

  9. Wenn Sie Lesezeichen-fähige Seiten erstellen möchten, können Sie die Verlaufsfunktion von GWT verwenden.

  10. 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.

  11. Die verzögerte Bindungsfunktion von GWT ist eine gute Funktion, die aufgrund von Java vermutlich bereitgestellt werden kann.

  12. 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.

  13. 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.)

  14. Die Client Bundle-Funktion von GWT erleichtert die Verwaltung Ihrer anderen Webressourcen wie CSS, Bilder und anderer Textinhalte.

    • CSS-Ressourcen ermöglichen es, bedingte Logik in Ihrem CSS zu haben. Sie können auch über Ihren GWT-clientseitigen Java-Code auf einige dynamische Werte zugreifen.
    • Es wird auch dafür sorgen, dass Ihre CSS-Klassen verschleiert werden. Und vor allem hat GWT die automatische Generierung von Schnittstellen aus Ihren CSS-Dateien zur Verwendung von CSS-Klassen.
    • Die Bildressource erleichtert Entwicklern die Verwendung von Bildern in Ihrer Anwendung auf sehr einfach zu wartende Weise. Wenn ich leicht sage, meine ich zu sagen, wenn Sie Bilder in GWT-Java-Code verwenden möchten, anstatt eine fest codierte URL zu verwenden, können Sie eine Bildressource verwenden. Wenn Sie die Bildressource ändern oder ein anderes Bild mit einem anderen Namen verwenden, müssen Sie es nur an einer Stelle ändern. Ein wichtigeres Merkmal der Bildressource ist, wenn Sie sie mit der CSS-Ressource als Sprite verwenden. Es wird dafür gesorgt, dass dieses Bild als Inline-Daten-Uri erstellt oder mit Sprite verwendet wird. Ich sage nicht, dass es nicht möglich ist, dies mit anderen Frameworks zu tun. Wichtiger ist, wie schnell und einfach Sie es tun können. GWT macht es Ihnen viel einfacher.
    • Data Resource fügt eine Optimierung für Datendateien wie .pdf hinzu, um diese Dateien basierend auf ihrem Inhalt umzubenennen, damit sie vom Browser stark zwischengespeichert werden können. Kleine Datendateien können in Inline-Daten-Uri konvertiert werden.
    • Indem Sie das Client Bundle für andere Webressourcen verwenden und Ihre Anwendung ordnungsgemäß in verschiedene Module strukturieren. Es kann mit jeder Ressource zu vollständig wiederverwendbaren Modulen werden. Was ist das Besondere an wiederverwendbaren Modulen? Nun, wenn Sie Bilder verwenden, indem Sie in einem Modul eine direkte URL verwenden. Wenn Sie dieses Modul in ein anderes Modul aufnehmen und versuchen, die in diesem Modul erstellten Komponenten zu verwenden, müssen diese Bilder weiterhin in die öffentliche URL Ihrer endgültigen Anwendung kopiert werden. Was Sie nicht tun müssen, wenn Sie diese Bilder als Bildressourcen verwenden.
    • Weitere Optimierungen können Sie erzielen, indem Sie kleine Module mithilfe des Client-Bundles für CSS und Images erstellen. Hier können Sie festlegen, dass nur die erforderlichen Module in Ihre endgültigen Module aufgenommen werden. Der Unterschied besteht darin, dass das endgültige Modul JavaScript und andere Ressourcen nur den erforderlichen Inhalt und nicht den gesamten Inhalt enthalten, selbst wenn Sie einen kleinen Teil des Moduls verwenden möchten.
  15. Zellen-Widgets: Um die paginierte Datenerfassung darzustellen, verfügt GWT über Zellen-Widgets. Es gibt Widgets wie CellTable, CellList, CellTree und CellBrowser.

    • CellTable ist für die Darstellung von Daten im paginierten Tabellenformat gedacht. Es verfügt über eine Funktion, mit der Sie den Inhalt einer bestimmten Zelle ändern können. Es unterstützt die Paginierung auf Client- und Serverseite, das Sortieren nach Spalten sowie die Auswahl eines oder mehrerer Datensätze und das Generieren von Ereignissen für denselben.
    • CellList kann verwendet werden, um Daten im Listenformat darzustellen, und Elemente können im benutzerdefinierten Format angezeigt werden. Es unterstützt auch die clientseitige und serverseitige Paginierung und Auswahl eines oder mehrerer Datensätze und generiert Ereignisse zur Auswahl. CellTree und CellBrowser können verwendet werden, um Daten im Baumformat darzustellen.
  16. 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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.