Quali sono i vantaggi comprovati di strumenti come GWT rispetto ai framework JavaScript puri?


11

GWT è uno stack software che traduce il codice Java e un sottoinsieme della libreria di classi di Java Runtime in codice JavaScript.

In confronto ai toolkit JavaScript, GWT può sembrare alienante, per natura e per uso, e troppo complesso per fare anche cose semplici, togliendo gran parte del controllo fine che avresti usando JavaScript direttamente.

Perché uno sviluppatore web dovrebbe scegliere di utilizzare uno strumento come GWT, che utilizza un linguaggio originariamente non mirato per il Web, invece di utilizzare solo framework e toolkit JavaScript e JavaScript?

È misurabilmente migliore e basato su quali criteri?

Risposte:


27

Batterie incluse

Tooling di Java

È semplicemente fantastico:

  • IDE: anche se alcuni IDE supportano JavaScript, il livello di supporto non si confronta. Prova a riformattare il codice JavaScript su basi di codice di grandi dimensioni (diciamo 40K + LOC) e piangi.
  • Test unitari: sebbene raccolto negli ultimi anni, è anche molto più maturo nel mondo Java.
  • Integrazione continua e ispezione continua
  • Generazione della documentazione: Sicuro di avere JSDoc e pochi altri

Static-tipizzazione

Cattura i bug in anticipo. (Google Closure lo risolve un po 'mantenendo lo sviluppatore nel mondo JavaScript, se preferisci).

JavaScript ottimizzato

GWT scrive JavaScript più veloce e compatto di te (per applicazioni di grandi dimensioni) e ti consente di determinare ciò che viene inviato al client probabilmente più facilmente rispetto a soluzioni JS complete equivalenti.

Architettura

Fornisce una buona separazione delle preoccupazioni per le applicazioni di grandi dimensioni, con architetture MVC o MVP decenti già precotte a portata di mano.

Biblioteca decente

GWT fornisce librerie interessanti e semplifica (bene, semplifica) la creazione di applicazioni abilitate per I18N con caricamento dinamico dei bundle.

Unit test

Utilizzo di JUnit da Eclipse IDE e dalla riga di comando. Questo riguarda il mio primo punto. Potresti anche usare alcuni degli strumenti di qualità del codice Java su un progetto GWT (per i controlli del codice sorgente, non per i bytecode, poiché non ce ne sono).

È tutto su di te!!

GWT non è per tutti. Rende alcune persone più produttive e offre un buon strumento per gli sviluppatori non JS per creare app Web professionali con front-end dinamici senza toccare (troppo) JavaScript. Ma se non funziona per te, usa semplicemente qualcos'altro.

Se vuoi la maggior parte di quanto sopra ma semplicemente non vuoi Java, forse guarda Google Closure o Dojo Toolkit .

Era una buona idea al momento: la storia conta !!

Il mondo JavaScript (e le tecnologie web front-end in generale) è estremamente attivo in questi giorni, quindi le cose stanno migliorando. Ma solo qualche anno fa le cose non erano così brillanti. LESS / SASS non erano così popolari, jQuery non era ancora la libreria JS di fabbrica, le librerie JavaScript non venivano generate ogni due settimane e gli strumenti non erano così fantastici in generale.

Ma c'era già una crescente domanda di applicazioni Web professionali e di grandi dimensioni con front-end dinamici, quindi c'era un gap da colmare per rendere gli sviluppatori più produttivi. JavaScript ha molte insidie ​​e stranezze di cui devi essere consapevole, e forse è semplicemente meglio non aver nemmeno bisogno di prendersi cura di loro. Da qui la nicchia per strumenti come GWT.

Da allora ne sono apparsi altri (mi viene in mente CoffeeScript, Dart sta arrivando, ma anche grandi framework JavaScript, la rivoluzione del JS lato server con Node.JS e altri, e un forte ritorno per JavaScript come "abbastanza buono" tutto un linguaggio esteso da utilizzare non solo sul lato client ma anche in altre parti dello stack aziendale.


Note aggiuntive

Per quanto riguarda la tua domanda originale (ora modificata) sull'uso di Firebug

Puoi ovviamente eseguire il debug del codice GWT con Firebug, ma idealmente dovresti eseguirne il debug direttamente dal debugger di IDE Eclipse, che ora fornisce supporto per il debug del codice live.

Tuttavia, Firebug è ancora utilizzabile, anche se è necessario tenere presente che GWT genera JavaScript ottimizzato e compresso, che potrebbe non essere facile da eseguire il debug così com'è.

Per quanto riguarda la tua domanda originale (ora modificata) sui CSS

Sì, ovviamente devi comunque scrivere tu stesso il codice CSS. Abbina il tuo progetto GWT con altri strumenti (come SASS), più o meno facilmente.

È solo uno strumento!

Non confondere GWT con ciò che non lo è: non scrivere il codice Java da eseguire direttamente sul lato client come bytecode Java. Scrivi il codice in linguaggio Java, che viene poi tradotto in JavaScript per efficienza e per permetterti di usare un linguaggio di livello superiore (o, almeno, è così che deve essere visto).

Probabilmente , Java e JavaScript potrebbero essere considerati comparabili in termini di livelli di astrazione. Tuttavia, Java presenta alcuni vantaggi (dettagliati sopra), quindi il vantaggio di raccogliere i benefici degli strumenti esistenti senza la necessità di riscriverli. Gli sviluppatori di Google hanno appena avuto l'idea intelligente di rendere possibile riutilizzare gli strumenti esistenti orientati a Java, ma di sviluppare effettivamente applicazioni JavaScript.

Inoltre, risolvono un altro problema, che era la gestione spesso ingombrante di applicazioni web in due lingue in cui il codice JavaScript e Java venivano trattati separatamente. L'uso di GWT consente un certo livello di convergenza per entrambi i lati del processo di sviluppo.


Ulteriori letture:


"Probabilmente, Java e JavaScript potrebbero essere considerati comparabili in termini di espressività." Scherzo? Le funzionalità equivalenti in Java sono circa 5 volte più lunghe.
Kevin Cline

@kevincline: corretto, non intendevo scrivere espressività, intendevo termini di livelli di astrazione. Grazie per averlo individuato (sono le 2 del
mattino

6
@kevincline: in più ho detto "discutibile", e i fanatici
irriducibili

1
Oltre agli articoli di @ Halem, aggiungerei che OO basato su prototipo di JavaScript può essere un po 'strano per qualcuno che proviene da un sistema basato su classi come Java. La coerenza dell'approccio è spesso utile.
Matthew Flynn,

@MatthewFlynn: e viceversa: ecco perché gli sviluppatori JS puri stanno sicuramente avendo un momento più difficile salire sul carro-carro GWT o utilizzare più framework pesanti che replicano più o meno un paradigma OO basato sulla classe.
Hayylem

6

Dopo aver trascorso anni a sviluppare un'applicazione Web in GWT, la mia opinione è che GWT presenta degli svantaggi così gravi che non lo userei mai più se non dovessi farlo.

Albero DOM

Sebbene le prestazioni JavaScript possano essere migliori, l'albero del DOM renderizzato è spesso inutilmente complesso. Ad esempio, l'implementazione della struttura ad albero utilizza oltre 13 elementi DOM, incluso un <table> per ogni singolo elemento. L'uso di alberi di grandi dimensioni (circa 10000 articoli) congela semplicemente il browser. Un albero JavaScript / HTML / CSS puro è stato in grado di gestire facilmente la stessa quantità di elementi.

Sviluppo

Il ciclo di modifica-prova della fonte JavaScript / HTML / CSS pura non può essere battuto. Basta salvare il file sorgente e aggiornare la pagina nel browser. Questo è un fattore chiave nella produttività e GWT non può competere nemmeno usando il server di codice.

Il debug di JavaScript è assolutamente facile e piacevole con il debugger di Chrome o Firebug.

Esperti del martello

L'idea di utilizzare Java per ogni cosa è per gli sviluppatori che sono "esperti del martello". Sono padroni del loro martello, quindi tutto è un chiodo. Penso che questo approccio sia molto sbagliato. L'uso di GWT richiede anche la conoscenza di CSS e HTML. Senza questo gli sviluppatori GWT spesso incontrano problemi che trovano quasi impossibili da risolvere, mentre qualcuno con esperienza HTML / CSS può trovare una soluzione. Se gli sviluppatori hanno bisogno di questa competenza, possono farlo più facilmente con lo sviluppo in HTML.

La mia opinione è che la maggior parte dei vantaggi offerti da GWT sono almeno discutibili mentre gli svantaggi sono molto più gravi rispetto allo sviluppo in puro JavaScript / HTML / CSS.


2

Non è misurabile meglio.
Per l'uso quotidiano, prendere in considerazione jQuery , AmpleSDK o alcuni polyfill html5 .

GWT ha molte spese generali: reali e concettuali.

Potrebbe essere utile se si dispone di un'app Java o di un codice Java sul lato server per il porting a un frontend Web.


Intendi ClojureScript. Clojure stesso un linguaggio basato su LISP destinato alla JVM. ClojureScript è quello che produce il codice JS.
Hayylem

Sì, lo avevo già modificato, comunque. Mantenerlo semplice.
ZJR

2

Alcuni vantaggi dell'utilizzo di GWT a cui penso (maggiori dettagli leggi il mio blog http://www.pandurangpatil.com/2012/09/benefits-of-using-gwt.html )

  1. Poiché l'applicazione client GWT è scritta in Java, si ha l'opportunità di rilevare errori sintattici in fase di compilazione a causa della stessa (sebbene non supporti tutte le classi JRE in quanto tali funzionalità non sono supportate dai browser stessi). Facciamo un esempio per capire cosa sto dicendo. Se si scrive erroneamente un nome di variabile JavaScript utilizzando la libreria JavaScript pura. L'unico modo in cui è possibile rilevare tale errore è eseguire l'applicazione e verificare i risultati desiderati. Le funzionalità Java come Generics e Annotations sono complete e possono essere utilizzate nella tua applicazione.

  2. Si può fare uso delle librerie disponibili esistenti o scriverne una per generare facilmente il codice secondo i requisiti poiché il codice che deve essere generato deve essere in Java. Il compilatore GWT si occupa di compilarlo e convertirlo in JavaScript.

  3. La gestione del codice diventa più semplice.

  4. Si può semplicemente scrivere una logica aziendale comune in modo tale che possa essere utilizzata nel codice lato client GWT e anche nel codice lato server come in Java, ad es. Convalida dei dati o alcune funzioni di utilità comuni.

  5. Con l'uso del plug-in eclipse GWT, è possibile eseguire facilmente il debug del codice client in Java per la propria logica aziendale.

  6. Mentre il compilatore GWT compila il codice Java del client e genera JavaScript da esso. Di cui hai bisogno distribuiscilo sul tuo server e viene servito ed eseguito nel browser dell'utente quando richiesto. Durante la generazione di questo JavaScript farà alcune ottimizzazioni.

    • Non considera il codice morto durante la generazione di JavaScript, quando dico codice morto intendo dire "codice che è lì ma non viene chiamato dal flusso principale". A sua volta riduce la dimensione effettiva del tuo codice JavaScript finale.

    • Si occupa dell'offuscamento del codice JavaScript generato.

    • Fa la minimizzazione del codice JavaScript generato.

    • E, soprattutto, genererà separatamente il codice ottimizzato specifico del browser. Quando dico separatamente, genererà JavaScript separato specifico del browser che verrà servito quando la rispettiva richiesta viene ricevuta da un determinato browser. Il che a sua volta riduce la dimensione del codice JavaScript che viene scaricato per browser specifico in quanto non contiene tutta la gestione specifica del browser in un unico codice.

  7. Se stai scrivendo la tua domanda per diverse lingue, ad esempio inglese, hindi, marathi ecc., Utilizzando la funzionalità di internazionalizzazione di GWT. Durante la generazione del codice JavaScript crea una copia per lingua e combinazione del browser. Il che rende il codice JavaScript generato per una determinata combinazione di lingua e browser più ottimale e piccolo.

  8. Nel caso in cui sia necessario utilizzare JavaScript diretto che può essere chiamato dal codice GWT di Java, è possibile farlo utilizzando JSNI (JavaScript Native Interface). Si può anche richiamare il codice Java GWT da JavaSctipt.

  9. Se vuoi rendere le pagine dei segnalibri abilitate, puoi usare la funzione Cronologia di GWT.

  10. Se si desidera utilizzare JSON come formato di dati per la comunicazione e la manipolazione, ha un'ottima funzionalità chiamata Tipi di overlay JavaScript.

  11. La funzionalità di binding differito di GWT è una buona funzionalità che suppongo sia possibile fornire a causa di Java.

  12. Puoi costruire la tua interfaccia utente usando i widget disponibili di GWT in stile Swing Java. Puoi persino creare i tuoi widget personalizzati molto facilmente.

  13. Se desideri creare la tua interfaccia utente (pagine Web) in puro stile html, puoi utilizzare la funzione di interfaccia utente dichiarativa di GWT. Che ritengo una delle principali caratteristiche di GWT. Ciò rende più semplice per gli sviluppatori la creazione di pagine in puro stile HTML. Suppongo che sia più gestibile della codifica in stile Swing. E, soprattutto, puoi avere la tua logica in Java e solo la parte di presentazione in puro HTML. (Nota: qualunque metodo tu usi (UI dichiarativa o Swing Style) alla fine sarà solo HTML, ma ciò che fa la differenza è il modo in cui lo codice e lo mantieni).

  14. La funzionalità Bundle client di GWT semplifica la gestione di altre risorse Web come CSS, immagini e altri contenuti di testo.

    • Le risorse CSS consentono di avere una logica condizionale all'interno del tuo CSS. Puoi anche accedere ad alcuni valori dinamici dal tuo codice Java lato client GWT.
    • Si occuperà anche di offuscare le tue lezioni di CSS. E, soprattutto, GWT ha automatizzato la generazione di interfacce dai tuoi file css per usare css classe.
    • La risorsa immagine semplifica lo sviluppo da parte degli sviluppatori delle immagini nell'applicazione in modo facilmente gestibile. Quando dico facilmente intendo dire quando si desidera utilizzare le immagini nel codice GWT Java anziché utilizzare un URL con codice hard, è possibile utilizzare la risorsa immagine. Il vantaggio che otterrai utilizzando la risorsa immagine è se hai intenzione di cambiare la posizione o utilizzare un'immagine diversa con un nome diverso, devi solo cambiarla in una posizione. La caratteristica più importante della risorsa immagine è quando la usi con la risorsa CSS come sprite. Si occuperà di creare quell'immagine come uri di dati in linea o usarla con sprite. Non dico che non sia possibile farlo con altri framework, ciò che è più importante è quanto velocemente e facilmente puoi farlo. GWT ti rende molto più semplice.
    • Data Resource aggiunge alcune ottimizzazioni per i file di dati come .pdf per rinominare quei file in base al loro contenuto per renderlo fortemente memorizzabile nella cache dal browser. I file di dati di piccole dimensioni possono essere convertiti in uri di dati in linea.
    • Facendo uso del pacchetto client per altre risorse Web e se strutturi correttamente l'applicazione in moduli diversi. Può diventare moduli completamente riutilizzabili nel loro insieme con ogni risorsa. Qual è il grosso problema dei moduli riutilizzabili? bene se stai usando immagini usando l'URL diretto in alcuni moduli. E se includi quel modulo in un altro modulo e provi a usare i componenti creati in quel modulo, devi comunque copiare quelle immagini nell'URL pubblico della tua applicazione finale. Che non devi farlo se usi quelle immagini come risorse di immagine.
    • Altre ottimizzazioni che puoi ottenere creando piccoli moduli utilizzando il bundle client per css e immagini. Dove puoi scegliere di includere solo i moduli richiesti all'interno dei tuoi moduli finali. La differenza che farà sarà il modulo finale JavaScript e altre risorse conterranno solo i contenuti richiesti e non l'intero contenuto anche se si desidera utilizzare una piccola parte del modulo.
  15. Widget cellulari: per presentare la raccolta di dati impaginati GWT ha widget cellulari. Esistono widget come CellTable, CellList, CellTree e CellBrowser.

    • CellTable è pensato per presentare i dati in formato tabella impaginata, ha funzionalità in cui è possibile modificare il contenuto di una determinata cella in atto. Supporta l'impaginazione sia lato client che lato server, supporta l'ordinamento su colonna e supporta anche la selezione di uno o più record e la generazione di eventi per lo stesso.
    • CellList può essere utilizzato per presentare i dati in formato elenco e gli elementi possono essere visualizzati in formato personalizzato. Supporta inoltre l'impaginazione lato client e server e la selezione di uno o più record e genera eventi per la selezione. CellTree e CellBrowser possono essere utilizzati per presentare i dati in formato ad albero.
  16. Comunicazione con il server dal codice client GWT. Supporta diversi modi per implementare la comunicazione del server client.

    • Se non sei preoccupato per il protocollo utilizzato per il trasferimento dei dati, allora meccanismo GWT RPC. È molto facile integrare il codice lato client per il trasferimento dei dati con il server. È possibile definire DTO personalizzati (oggetto di trasferimento dati) nel codice client che può anche essere utilizzato sul codice lato server. L'implementazione lato server accetta gli stessi DTO del parametro o del valore restituito. Tutto il resto è curato dal lavoro del telaio GWT RPC. Propaga persino le eccezioni sollevate dal codice lato server al chiamante nel codice lato client (a condizione che sia necessario definire tali classi di eccezioni all'interno del pacchetto di codice lato client. GWT RPC utilizza internamente le chiamate AJAX con il proprio protocollo personalizzato per il trasferimento dei dati.

    • Se non si desidera utilizzare GWT RPC, è possibile effettuare chiamate AJAX del server per recuperare i dati dal server utilizzando Request Builder. Che è anche molto più facile da implementare. Ha anche un'interessante funzione Request Factory. Con questa funzione è possibile esporre il proprio DAO o livello di servizio per ricevere chiamate dal codice client. Per fare ciò è necessario definire alcune serie di interfacce per il proprio servizio e tipi di dati personalizzati. E utilizzando queste interfacce è possibile accedere a tali servizi dal codice client. Ho scritto il plugin Maven per generare queste interfacce. Se annoti il ​​tuo livello DAO con alcune annotazioni richieste, fai riferimento ( https://github.com/pandurangpatil/gwt-mvn-helper) consultare il modulo mvn-helper-test al suo interno per l'utilizzo. Request Factory è più mirato all'integrazione con il livello ORM come JDO o JPA sul server. Ha un supporto per chiamare persist su una data entità dal codice client. E, soprattutto, quando chiami il metodo persist, calcola e invia solo modifiche (delta) al server per salvare.

    • Se si desidera effettuare chiamate JSONP tra domini diversi, è possibile fare lo stesso riferimento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.