2012-05-10 12 views
19

Ich verwendete MVC 3 Razor-Engine, um Seiten zu rendern. Manchmal musste ich AJAX-Aufrufe verwenden, um von Razor gerendertes HTML zu übertragen und es mit JQuery in die Seite einzufügen. Wenn ein neues Projekt beginnt, denken wir darüber nach, das für uns neue MVC 4 Single Page Application Framework zu verwenden. Ich habe den ersten Blick darauf geworfen, der mich mit gemischten Gefühlen zurückließ: Auf der einen Seite bedeutet es, dass alle Ihre Daten von JSON übertragen werden und der Client die ganze Arbeit ausführt, um sie zu rendern und einige UI-bezogene Logik zu codieren, die für Server und Netzwerkleistung. Auf der anderen Seite wird der Client (HTML + JavaScript) viel schwerer mit einer Reihe von magischen Strings und versteckten Relationen, die schwer zu verwalten zu sein scheinen. Wir haben uns an VS intellisense, typengesicherten .NET-Server-Code gewöhnt, um Seiten zu rendern, die wir für Client-Skripts austauschen müssen, und knockout-bindende Anweisungen im Falle von SPA.Razor-basierte MVC vs Single-Page-Anwendung in MVC 4

Ich frage mich, sind irgendwelche Vor- und Nachteile der Verwendung von SPA im Vergleich zu Razor, andere, dass diese offensichtliche ich hier erwähnt habe? Danke

+2

Falsche Wahl. Sie können Razor in einem SPA verwenden. Nur vielleicht nicht so viel. –

+3

Wir werden Razor zum ersten Mal Seite laden ohne Daten verwenden, alle Restanforderungen sollen mit Hilfe von Ajax + JSON, MS SPA nicht mit Razor für die Datenlast – YMC

+4

"Prons" durchgeführt werden. Lol, ich denke, das sollte das neue Ersatzwort für "Pro und Contra" sein. – Dan

Antwort

4

Ich denke, es klingt, als ob Sie hier schon ziemlich gut von den meisten Kompromissen informiert sind; Sie werden die Netzwerklast mit SPA reduzieren und ein gewisses Maß an Verarbeitung an den Client verlagern. Sie werden jedoch die Komplexität Ihres Codes erhöhen und es etwas schwieriger machen, das System einfach zu warten (einfach wegen der erhöhten Komplexität - nicht aufgrund irgendwelcher architektonischen Probleme, die SPA innewohnen).

Eine andere Sache, die man beachten sollte, ist die Kompatibilität. Der Grund, warum ich in meinem Kommentar zu Ihrer Frage eine "falsche Wahl" erwähnt habe, ist, dass Sie, um die Seite für Leute mit deaktiviertem Javascript nutzbar zu machen, weiterhin normale Seitenansichten bereitstellen müssen. Dies ist auch eine gute Idee, um SEO zu tun; Ein Crawler durchsucht Ihre Site als Benutzer mit deaktiviertem JS und kann Ihre Site indizieren. Die Site sollte dann solche eingehenden URLs richtig behandeln, so dass diejenigen mit JS, die aktiviert sind, sich in Ihrem SPA befinden und den gleichen Inhalt betrachten (im Gegensatz dazu, dass sie in der Ansicht "no JS" unnötigerweise abgelegt werden).

Es gibt etwas anderes, das ich als eine Möglichkeit erwähnen werde, die mit dem oben genannten helfen könnte, aber es bricht die Ideale eines SPA; das heißt, an einigen Stellen Ajax-geladene Teiltöne anstelle von JSON-Daten zu verwenden. Angenommen, Sie haben ein typisches "Kontakt E-Mail" -Formular auf der Website. Sie möchten, dass das im Kontext des SPA geladen wird, aber es ist wahrscheinlich einfacher, dies zu tun, indem Sie das Partial über AJAX laden. (Obwohl sicherlich, ja; Sie könnten es mit einem JSON-Objekt tun, das die Felder beschreibt, die im E-Mail-Formular angezeigt werden sollen).

Es wird wahrscheinlich auch Inhalte geben, die mehr "Inhalt" als "Daten" sind, die Sie vielleicht immer noch über Partials und Ajax laden möchten.


Ein SPA ist auf jeden Fall ein interessantes Projekt, und ich werde es selbst einrichten. Ich habe eine Mischung aus JSON und Partials verwendet, aber das mag nicht deine eigene Entscheidung sein.

+1

Ich sehe keine Verringerung der Netzwerklast. Wenn Sie 50 Datensätze laden, spielt es keine Rolle, ob sie im Voraus oder nach Bedarf geladen werden. Die Lautstärke ist gleich. Der Vorteil ist die Last über einen längeren Zeitraum hinweg. Dies führt zu einem Ansatz, der mehr nach Bedarf erfolgt. –

+14

@ChuckConway Laden von 50 Datensätzen über JSON ist definitiv weniger Netzwerkübertragung als Laden einer HTML-Seite, die den ganzen Rest der Formatierung, Layout und andere Markup * plus * 50 Datensätze enthält. –

+2

Wenn Sie die GESAMTE Seite aktualisieren. Ja du hast Recht. Wenn Sie nur über JSON laden, dann ist das nicht der Fall. –

17

Razor ist eine serverbasierte Technologie, bei der SPA (Single Page Application) ein auf dem Client (Webbrowser) verwendeter Architekturansatz ist. Beide können zusammen verwendet werden.

Auf einer höheren Ebene verschiebt SPA das Rendering und den Datenabruf auf den Client. Der Webserver wird zu einer Serviceschicht vor der Datenbank. Ein MVC-Muster funktioniert am besten, wenn SPA verwendet wird. Frameworks wie Knockout.js und Backbone.js können dafür verwendet werden. Das Ergebnis ist eine reaktionsschnelle Desktop-ähnliche Erfahrung.

Um dies zu erreichen, müssen Sie ein Javascript-Programmierer sein oder Javascript lernen.

Ja, es bewegt Geschäftsanforderungen von C# in Javascript. In Visual Studio gibt es eingeschränkte Intelligenz für Javascript.Um Vertrauen in Ihr Javascript zu haben, müssen Sie sich auf Komponententests stützen. Die Oberseite ist die reiche Benutzererfahrung (denke Gmail oder Google Maps).