Dev approcci a complessi dell'interfaccia utente JavaScript [chiusa]

19

Sto cercando di capire il panorama dei diversi approcci e le migliori pratiche, attorno allo sviluppo di complessi JavaScript lato client.

Non sono sicuro su cosa etichettare questa classe di applicazioni, forse AJAX pesante o RIA (ma non plug-in come Flash / Silverlight). Mi riferisco alle app web con queste caratteristiche:

  • Emulazione di UX desktop ricco / nativo in JavaScript
  • Contiene il comportamento più / tutto nel JS lato client, utilizzando il server come un'API dati (modelli JSON / Html).

Questo è in contrasto con l'utilizzo del web server per il rendering dell'interfaccia utente, producendo tutto l'HTML in un modello di aggiornamento della pagina.

Alcuni esempi sono:

  • Google Documenti / Gmail
  • MindMeister
  • Tracker pivotal

Mentre andiamo avanti in HTML5, posso vedere questo stile di sviluppo RIA, con JavaScript pesante, diventare sempre più comune e necessario per competere.

DOMANDA: Quindi quali sono gli approcci comuni che emergono nella gestione di questi tipi di pesanti sviluppi JS?

Il codice lato client, mano a mano che l'app cresce nelle funzionalità, è diabolicamente complicato. Ci sono problemi nel ridimensionare uno sforzo di sviluppo su più team con raw JS (o così ho sentito, e posso crederci).

Google ha affrontato il problema costruendo GWT che compila da un linguaggio di livello superiore (Java) a JS, appoggiandosi all'infrastruttura di sviluppo esistente che ha il linguaggio di livello superiore (Eclipse, strong-typing, refactoring tools), insieme all'astrazione compatibilità con il browser e altri problemi lontani dallo sviluppatore.

Ci sono altri strumenti, come Script # per C # che fanno qualcosa di simile. Tutto ciò mette JS più nel ruolo di un IL (Intermediate Language). vale a dire. "Non scrivi mai più in quel" linguaggio di basso livello ".

Ma questo 'compile to JS' non è l'unico approccio. Non è chiaro che GWT sia l'approccio dominante ... o addirittura lo diventerà.

Che cosa fanno le persone con JavaScript rich-client? Alcune domande orientative:

  • La maggior parte dei negozi crea manualmente JS (su librerie come jQuery et al)?
  • O ci sono molti approcci diversi, senza che emergano chiare migliori pratiche?
  • La maggior parte dei negozi evita lo sviluppo di scala RIA a favore del modello più semplice per sviluppatore lato server / pagina di ridisegno? Se è così, durerà?
  • La compilazione di JS è forse una tendenza futura emergente? O è solo sbagliato?
  • Come gestiscono la complessità e il refactoring del client JS?
  • Modularizzazione e distribuzione del lavoro tra i team?
  • Applicazione, applicazione e test di modelli lato client come MVC / MVP ecc.

Quindi, quali sono le tendenze emergenti in questo nostro futuro heavy-JavaScript e HTML5?

Grazie!

    
posta Phil Cockfield 13.11.2010 - 19:52
fonte

5 risposte

6

La maggior parte delle app Web che vedo (e gli sviluppatori Web con cui ho parlato) che si stanno muovendo in questa direzione utilizzano jQuery come base.

L'intero ragionamento alla base di GWT (e di linguaggi multilivello simili) è che JavaScript è troppo flakey / troppo fragile / troppo mutevole per essere utilizzato dai "veri programmatori". Ma se hai un framework che gestisce i bit flakey / fragili / mutevoli per te, allora non c'è motivo di aggiungere un ulteriore livello di complessità.

Solo la mia opinione ...

    
risposta data 15.11.2010 - 08:45
fonte
5

Direi che GWT è rischioso. Una volta che hai deciso di usarlo, sei bloccato con esso. Fondamentalmente significa che tratti il tuo markup, DOM e alcuni aspetti del CSS come ambiente di esecuzione. Sta diventando davvero difficile mescolare JavaScript scritto manualmente con GWT mentre il codice client diventa sempre più sofisticato. GWT ha metodi nativi, ma quelli sono abbastanza limitati in termini di possibile applicabilità. Questo è un grande scambio ed è una grande scommessa.

Google cerca di vendere GWT come un ambiente di esecuzione della piattaforma X molto veloce con una discreta integrazione lato server. Ma come già sottolineato da altri, non è più il caso: JQuery e YUI sono altrettanto veloci se non più veloci. Ed è molto più facile profilare e ottimizzare le tue pagine quando vengono assemblate manualmente in modo da avere il pieno controllo su CSS, markup e JavaScript.

GWT cerca di nascondere la piattaforma sottostante da te che potrebbe essere in realtà un modo sbagliato di fare le cose. Un sacco di cosiddetti componenti web framework hanno fatto lo stesso. Dovevi scrivere un codice ambiguo derivato da XML con EL e tag personalizzati inseriti. L'output sarebbe un casino di HTML mal formato con piccoli pezzi di crappy JavaScript sparsi ovunque. Le pagine erano lente, buggy e totalmente non gestibili.

Nel nostro progetto attuale usiamo Stripes - un framework basato su azioni di basso livello, - e JQuery su un lato client. È molto facile fare Ajax una volta che vedi chiaramente tutti i pezzi di un puzzle: ecco il tuo codice lato server che opera sui dati. Ecco il tuo codice lato client - per il recupero dei dati e per far accadere le cose su una pagina. Ecco il tuo CSS, ecco il tuo markup, ecco il tuo template - tutto è pulito e disaccoppiato. Facilmente estensibile, hackable, sintonizzabile e debugabile. Lo adoro.

Adoro JQuery con il suo atteggiamento verso la velocità e la semplicità. Adoro YUI3 per modularità e widget completi. Adoro i CSS di YUI per darmi coerenza tra i vari browser. Adoro JavaScript per Good Parts. Adoro Java per avermi fatto fare un lavoro.

Solo KISS, e starai bene!

    
risposta data 18.11.2010 - 16:59
fonte
3

Ho sentito queste chiamate "Applicazioni a pagina singola".

Questo è un nuovo ambiente e le regole non sono ancora completamente scritte. Ho lavorato a un'applicazione a pagina singola relativamente importante l'anno scorso (2010), e questi sono gli strumenti che abbiamo usato.

Il back-end era Java, che utilizza servlet per fornire un servizio JSON, che la pagina usava per inviare l'ordine preparato alla fine. Questo servizio è stato utilizzato anche per alcuni passaggi di convalida e prezzi.

Il codice front-end era javascript. Abbiamo utilizzato jQuery per manipolare gli elementi della pagina, Pure per i modelli e RequireJs per suddividere il codice in moduli. (È stato utilizzato lo strumento di compilazione di RequireJs per fornire download più ottimali.)

Abbiamo scritto i nostri test utilizzando qUnit e abbiamo avuto un test jUnit che utilizzava htmlunit per eseguire ogni test qUnit, quindi raschiare l'output per i risultati e passare o fallire in base allo stato qUnit pass / fail. Questi sono stati aggiunti ai nostri test jUnit per il back-end e sono stati inseriti nel nostro ci, utilizzando Hudson / Jenkins .

    
risposta data 08.08.2011 - 15:22
fonte
2

Lavoro su questa app, costruita su Ext JS. L'app è organizzata in modo modulare. Diversi moduli vengono implementati come componenti autonomi che si puliscono da soli quando vengono rimossi dalla gerarchia del componente Ext. I caricatori su richiesta caricano componenti aggiuntivi prima che siano necessari (un file js = un componente).

Ho scoperto che questo approccio non è così difficile da scalare. Gli unici limiti reali che ho incontrato sono legati all'eccessiva presenza di troppi elementi DOM nell'albero in IE. La soluzione è quella di scaricare strategicamente parti nascoste dell'applicazione. Poiché tutta la manipolazione DOM avviene tramite la gerarchia di componenti Ext, il DOM è quasi completamente estratto e lo sviluppo rimane semplice.

    
risposta data 15.11.2010 - 14:17
fonte
0

Personalmente ritengo che i framework come jQuery siano vitali non solo per gestire le variazioni tra diversi browser, ma anche per eliminare quelle differenze in modo che non aggiungano rumore al codice. Strumenti come GWT, Websharper e altri lo fanno più lontano e sicuramente hanno un posto, ma mi chiedo se nella maggior parte dei casi si tratti solo di un ulteriore livello di riferimento indiretto .

Qualcosa che mi ha sorpreso che nessuno ha menzionato è il test unitario. È ormai generalmente accettato che le complesse applicazioni lato server debbano avere test unitari automatizzati e penso che sia già arrivato il momento in cui il JS nelle app RIA è abbastanza complesso da richiedere un test unitario - insieme all'architettura / codice che lo rende possibile.

Tuttavia, a differenza delle complesse applicazioni lato server, la mia sensazione istintiva basata su ciò che vedo e sento è che la maggior parte delle complesse app lato client non ha assolutamente test di unità (non sto parlando di test sul selenio qui, unità reale test).

Penso che la prossima tendenza emergente sarà l'introduzione del test unitario (e il codice che è unit-testabile). Avendo appena completato un progetto con una quantità moderata di JavaScript non testato unitamente, spero che sarà l'ultimo.

    
risposta data 16.11.2010 - 13:07
fonte

Leggi altre domande sui tag