2012-05-10 10 views
19

Ho usato il motore MVC 3 Razor per eseguire il rendering delle pagine. A volte dovevo usare le chiamate AJAX per trasferire il codice HTML reso a rasoio e inserirlo nella pagina usando JQuery. All'inizio del nuovo progetto, consideriamo l'utilizzo di MVC 4 Single Page Application framework che è nuovo per noi. Ho preso la prima occhiata a ciò che mi ha lasciato con sentimenti contrastanti: Da una parte implica che tutti i tuoi dati vengono trasferiti da JSON e il client fa tutto il lavoro per renderli e codificare una logica relativa all'interfaccia utente che è grande per server e prestazioni di rete. D'altra parte il client (HTML + JavaScript) diventa molto più pesante con un mucchio di stringhe magiche e relazioni nascoste al suo interno che sembra essere difficile da mantenere. Ci siamo abituati a VS intellisense, codice server .NET protetto dal tipo per rendere le pagine che dobbiamo scambiare per script client e istruzioni vincolanti Knockout in caso di SPA.MVC basato su rasoio e applicazione pagina singola in MVC 4

Mi chiedo quali sono i pro e i contro dell'utilizzo di SPA rispetto a Rasoio, oltre a quello ovvio che ho menzionato qui? Grazie

+2

False scelta. Puoi usare il rasoio in una SPA. Solo forse non tanto. –

+3

Useremo Razor per il caricamento della prima pagina senza dati, tutte le richieste di resto devono essere fatte con l'aiuto di Ajax + JSON, MS SPA non implica l'uso di Razor per il caricamento dei dati "prons" – YMC

+4

"prons". Lol, penso che dovrebbe essere la nuova parola sostitutiva per "pro e contro". – Dan

risposta

4

Penso che sembra che tu sia già abbastanza ben informato sulla maggior parte dei trade-off qui; avrai ridotto il carico di rete con SPA e sposterai una misura dell'elaborazione sul client. Tuttavia, aumenterai la complessità del tuo codice e renderà leggermente più difficile mantenere facilmente il sistema (semplicemente a causa della maggiore complessità, non a causa di problemi architetturali inerenti a SPA).

Un'altra cosa da tenere a mente è la compatibilità. Il motivo per cui ho menzionato una "scelta sbagliata" nel mio commento alla tua domanda è che per mantenere il sito utilizzabile per persone con Javascript disabilitato, avrai comunque bisogno di fornire viste a pagina intera regolari. Questa è anche una buona idea da fare per il SEO; un crawler naviga il tuo sito come utente con JS disabilitato e può quindi indicizzare il tuo sito. Il sito dovrebbe quindi gestire correttamente tali URL in arrivo in modo che quelli con JS abilitati si trovino nella tua SPA guardando lo stesso contenuto (invece di essere scaricato nella vista "no JS" inutilmente).

C'è qualcos'altro che menzionerò come una possibilità che potrebbe aiutare con quanto sopra, ma rompe gli ideali di una SPA; cioè, usando partials caricati con Ajax in alcuni posti, piuttosto che dati JSON. Ad esempio, supponiamo di avere un tipico modulo "Contact EMail" sul sito; lo vuoi caricare nel contesto della SPA, ma probabilmente è più semplice farlo caricando il partial tramite AJAX. (Anche se certamente sì, lo si può fare con un oggetto JSON che descrive i campi da visualizzare nel modulo e-mail).

Probabilmente ci sarà anche contenuto che è più "contenuto" di "dati", che si potrebbe comunque voler caricare tramite partial e Ajax.


Una SPA è sicuramente un progetto interessante, e sto per installarne una anch'io. Ho usato un mix di JSON e partial, ma potrebbe non essere una tua scelta.

+1

Non vedo una riduzione del carico di rete. Se carichi 50 record, non importa se è caricato in anticipo o secondo necessità. Il volume è lo stesso Il vantaggio si estende al carico per un periodo di tempo più lungo. Questo si muove verso un approccio più on demand. –

+14

@ChuckConway Il caricamento di 50 record tramite JSON è decisamente inferiore al trasferimento di rete rispetto al caricamento di una pagina HTML che contiene tutto il resto della formattazione, del layout e altri markup * più * 50 record. –

+2

Se si sta aggiornando la pagina INTERO. Sì hai ragione. Se si sta caricando solo tramite JSON, quindi no non lo è. –

17

Razor è una tecnologia basata su server in cui SPA (Single Page Application) è un approccio di architettura utilizzato sul client (browser Web). Entrambi possono essere usati insieme.

Da un livello elevato, SPA sposta il rendering e il recupero dei dati sul client. Il server Web diventa un livello di servizi che si trova di fronte al database. Un modello MVC funziona meglio quando si utilizza SPA. Per questo possono essere usati framework come Knockout.js e Backbone.js. Il risultato netto è una ricca esperienza di desktop reattivo.

Per raggiungere questo obiettivo è necessario essere un programmatore di javascript di discesa o essere disposti ad imparare javascript.

Sì, sta spostando i requisiti aziendali da C# in javascript. In Visual Studio c'è un intelli-sense limitato per javascript.Per avere fiducia nel tuo javascript dovrai appoggiarti ai test delle unità. Il lato positivo è la ricca esperienza utente (pensa a gmail o google maps).

Problemi correlati