Framework JavaScript per creare applicazioni a pagina singola [chiuso]


101

Il mio obiettivo è migrare un'applicazione Web esistente in un'applicazione RESTful a pagina singola (SPA). Attualmente sto valutando diversi framework di applicazioni web Javascript.


I miei requisiti sono i seguenti:

  • Livello dati RESTful (come ember-data)
  • MV * -Struttura
  • Percorsi dinamici
  • Test-support
  • Codifica per convenzione
  • SEO-support
  • Browser-Storia-Support
  • Buona documentazione (API)
  • Pronto per la produzione
  • Comunità vivente

Spina dorsale

L'applicazione corrente sta utilizzando backbone.js. Nel complesso, backbone.jsè un bel progetto, ma mi mancano strutture ben definite che determinano dove deve accadere e come le cose devono essere implementate. Lavorare in un team più grande con sviluppatori in evoluzione questo porta a una sorta di codice non strutturato, difficile da mantenere e difficile da capire. Questo è il motivo per cui sto cercando un framework che già definisca tutto questo.

brace

Ho esaminato ember.jsgli ultimi giorni. L'approccio mi sembra molto promettente. Ma, sfortunatamente, il codice cambia quasi ogni giorno. Quindi, non lo chiamerò pronto per la produzione. E, sfortunatamente, non vediamo l'ora che sia la versione 1.0. Ma mi piace molto l'idea alla base di questo quadro.

Angolare

Angular.jsè anche un framework ampiamente diffuso, gestito da Google. Ma non ho potuto familiarizzare con angolare. Per me, la struttura sembra un po 'poco chiara, mancano le spiegazioni delle responsabilità generali di ciascuna parte del framework e le implementazioni sembrano tortuose. Giusto per essere chiari: questa è solo la mia impressione personale e potrebbe essere basata sulla conoscenza mancante.

Batman e Meteor

Come ho capito, entrambi i framework richiedono anche una parte server. E poiché vogliamo solo un backend RESTful, indipendentemente dalla lingua, dalla tecnica o dal software, questo non è quello che vogliamo. Inoltre, l'API di backend esiste già (RoR).

Knockout , CanJS e Spine

Non ho approfondito questi tre candidati. Forse questo sarà il mio prossimo passo.


Quindi le mie domande ora:

  • Mi mancano dei buoni framework SPA?
  • Quale framework suggeriresti / consiglieresti?
  • Eviteresti uno qualsiasi dei framework menzionati?
  • Qual è la tua esperienza in applicazioni SP più grandi?

PS: Vorrei raccomandare un ottimo post sul blog di Steven Anderson (sviluppatore principale di Knockout.js) sulla conferenza "Il Trono di JS" (dal 2012) e sui framework javascript in generale.

PS: Sì, so che ci sono già alcune domande su SO. Ma poiché lo sviluppo è così rapido e veloce per le ZPS, la maggior parte di esse è già obsoleta.


Risposte:


81

Recentemente ho dovuto decidere su un framework JavaScript SPA anche su un progetto.

  • brace

    Ho guardato Ember all'inizio e ho avuto pensieri simili a te in merito - Mi è piaciuto molto ma sembrava che fosse ancora troppo presto per usarlo ... circa la metà dei tutorial che ho letto non funzionava con la versione corrente perché qualcosa aveva di recente cambiato nel modo in cui funziona la creazione di modelli.

  • Spina dorsale

    Backbone è stato il primo framework che abbiamo esaminato seriamente. Non sono sicuro di aver capito perché pensi che non abbia "strutture ben definite"? Backbone è abbastanza chiaro su come dividere il codice Model e View. Forse vuoi dire che non esiste una sorta di modello di app? Ad ogni modo, Backbone sembra davvero focalizzato sulla parte del modello / REST-binding, ma in realtà non prescrive nulla per il binding della vista. Se l'associazione del modello è importante per te e stai usando Rails, dovrebbe essere un gioco da ragazzi. Sfortunatamente, i servizi web per la mia app non corrispondevano davvero e ho dovuto scrivere i miei .synce i miei .parsemetodi per tutto. La separazione del codice Model e View è stata piacevole, ma dato che avremmo dovuto scrivere tutte le nostre associazioni da zero non ne è valsa la pena.

  • Tramortire

    Knockout è come lo Yin to Backbone's Yang. Laddove Backbone è focalizzato sul Modello, Knockout è un framework MVVM ed è focalizzato sulla View. Dispone di observablewrapper per le proprietà degli oggetti JavaScript e utilizza un data-bindattributo per associare le proprietà al tuo HTML. Alla fine abbiamo scelto Knockout poiché il binding della vista era principalmente ciò di cui avevamo bisogno per la nostra app. (... più altri, come discusso più avanti ...) Se ti piacciono le associazioni della vista di Knockout e le associazioni del modello di Backbone, c'è anche KnockBack che combina entrambi i framework.

  • Angolare

    Abbiamo guardato questo dopo Knockout - sfortunatamente siamo tutti abbastanza soddisfatti di come Knockout ha visto l'associazione. Sembrava molto più complesso e difficile da affrontare rispetto a Knockout. E utilizza un sacco di attributi HTML personalizzati per eseguire i collegamenti, che non sono sicuro mi piacciono ... Potrei dare un'altra occhiata ad Angular più tardi, perché dal momento che ho incontrato più persone a cui piace davvero il framework, forse noi ho appena guardato troppo tardi per questo progetto.

  • Batman , Meteor , CanJS , Spine

    Non ho davvero guardato troppo da vicino nessuno di questi. Anche se so che Spine è un framework simile a Backbone con oggetti Controller espliciti ed è scritto in CoffeeScript.

  • Epilogo

    Come ho detto, abbiamo finito per utilizzare Knockout perché, per il nostro progetto, concentrarci sull'associazione delle viste era più importante. Abbiamo anche finito per utilizzare RequireJS per la modularizzazione, crossroads e Hasher per gestire il routing e la cronologia, Jasmine per i test, così come JQuery , Twitter Bootstrap e Underscore.js (e probabilmente altre librerie che sto dimenticando al momento).

    Lo sviluppo di app Javascript è più simile all'ecosistema Java che all'ecosistema Rails. Rails fornisce un solido nucleo di cose che utilizzerai per ogni app (framework Rails) e la comunità fornisce molte personalizzazioni oltre a questo (gems). Java fornisce ... una lingua. E poi puoi scegliere Java EE o Spring o Play o Struts o Tapestry. E scegli JDBC o Hibernate o TopLink o Ibatis per parlare con il database. E poi puoi usare Ant o Maven o Gradle per costruirlo. E scegliere Tomcat o Jetty o JBoss o weblogin di eseguirlo in. Quindi non c'è più l'accento sulla scelta di che cosa avete bisogno e ciò che funziona insieme che scegliere IL framework per l'uso.


Grazie mille per la tua risposta dettagliata. Alcune domande riguardanti knockout.js: 1) Fornisce un qualche tipo di livello dati per mantenere sincronizzato il modello in frontend / backend? 2) Com'è il supporto per includere un template in un altro (probabilmente insieme a requireJS)? 3) È facile mettere tutti i file (modelli, viste, controller, helper ecc.) Separatamente e in cartelle diverse? Accanto a queste domande ho impostato la tua risposta su accettata, poiché hai fornito molte informazioni.
Christopher Will

@ChristopherWill Thanks! 1.) Proprio come Backbone lascia a te il compito di visualizzare il binding, Knockout lascia a te il compito di REST-> Model binding. Ci sono alcuni esempi nella documentazione: knockoutjs.com/documentation/json-data.html oppure puoi usare KnockBack per combinare REST-> Popolazione del modello di Backbone.
Nate

2.) Dipende da cosa intendi: Knockout ha un'associazione dati incorporata che ti consente di prendere una raccolta dal modello, associarla a un tag di elenco o di tabella e per ciascuno di eseguire il rendering di un modello specificato. Per cose su larga scala, come il modo in cui costruisci le tue viste generali e le scambi - è ancora un po 'manuale (almeno come lo faccio, sto ancora imparando) - RequireJS con il plugin di testo rende un po' più facile farlo, ma devi ancora specificare la logica e sostituire i div - lo faccio solo con i metodi che rispondono ai miei percorsi. Tuttavia, potresti essere in grado di collegare eventi Knockout per farlo.
Nate

3.) RequireJS è ciò che ti consente di farlo.
Nate

Grazie Nate. Penso che proverò KnockBack .. sembra piuttosto promettente. E, naturalmente, anche con le tue biblioteche menzionate (requireJS, crossroads ecc.)
Christopher Will

8

è passato un anno da quando abbiamo iniziato lo sviluppo del nostro progetto di servizi cloud con numerose SPA, quindi è stata una grande decisione, quale framework javascript utilizzare per la nostra interfaccia utente per soddisfare le nostre esigenze di architettura RESTful. e dopo molte ricerche abbiamo finito per utilizzare il framework Dojo .

caratteristiche principali che amerai:

  1. comunità istruita e un team che ha ideato un modello di progettazione perfetto. grandi convenzioni e architettura modulare / orientata agli oggetti. con atteggiamenti di programmazione CrossBrowser :)
  2. Struttura MV *. crea widget UI con modelli .htm esterni e per la produzione, crea tutti i tuoi javascript e modelli in un unico, minificato e piccolo .js
  3. costruire classi con ereditarietà. setter di proprietà, molti strumenti funzionali.
  4. meccanismo pub / sub (argomenti denominati nel dojo)
  5. un sacco di controlli dell'interfaccia utente, dal controllo del modulo di convalida, finestre di dialogo / descrizioni comandi a una soluzione di grafici e griglie di dati ricca di funzionalità, altamente personalizzabile (ma leggera).
  6. un buon sistema di unit test denominato DOH. ha anche un robot per riprodurre le azioni del mouse / tastiera.
  7. uno strumento di query (come JQuery) chiamato NodeList con tutte le funzionalità di jquery e anche molti dei suoi plugin.
  8. e la parte buona ma non così completa. ha un modulo JsonRest da usare con i tuoi servizi REST. è uno strumento utile ma manca di molte funzionalità.

per superare questi problemi, abbiamo sviluppato un poller AJAX, la gestione degli errori e una soluzione universale di caricamento e notifiche. lo abbiamo fatto molto facilmente usando le convenzioni e le strutture del framework dojo. se non vuoi farlo, forse devi usare un altro framework per questa parte.

guardando le fantastiche SPA sul Web scoprirai che sono tutte personalizzate e utilizzano più framework. ma la nostra esperienza con Dojo da sola è stata fantastica. e quindi ti consiglio di non pensare a nessun altro framework visto che sono tutti incompleti per una SPA. ma alla fine hai anche un'altra opzione (che non consiglio e non ho informazioni dettagliate). andare con un framework JAVA in grado di costruire SPA, generando automaticamente UI e javascript.


Ciao! Usi Dojo adesso? Hai un blog su Dojo?
Dunaevsky Maxim,

Ciao! Sì, lo usiamo ancora per lo stesso prodotto e lo manteniamo. il framework interno è scritto in cima al dojo, e lo aggiungiamo ogni giorno .. no, non ho un blog per questo. se hai intenzione di iniziare, oggi è considerato un vecchio strumento. Stanno ancora lavorando sul Dojo 2.0 ma per ora potrebbe essere meglio usare altre opzioni. abbiamo React / Angular in cima alla lista.
Unicornist
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.