2012-05-10 5 views
19

Solía ​​utilizar el motor MVC 3 Razor para representar páginas. A veces tuve que usar llamadas AJAX para transferir HTML renderizado por Razor e insertarlo en la página usando JQuery. A medida que se inicia un nuevo proyecto, consideramos utilizar el framework MVC 4 Single Page Application que es nuevo para nosotros. Lo miré por primera vez, lo que me dejó con sentimientos encontrados: Por un lado, implica que todos tus datos son transferidos por JSON y el cliente hace todo el trabajo para renderizarlos y codificar alguna lógica relacionada con la interfaz de usuario que es excelente para el servidor y rendimiento de la red. Por otro lado, el cliente (HTML + JavaScript) se vuelve mucho más pesado con un montón de cadenas mágicas y relaciones ocultas dentro de él que parece ser difícil de mantener. Nos acostumbramos a VS intellisense, código de servidor .NET tipo safed para renderizar páginas que tenemos que intercambiar por scripts de cliente y declaraciones vinculantes Knockout en caso de SPA.MVC basado en navaja vs. aplicación de página única en MVC 4

Me pregunto si hay prons y contras de usar SPA en comparación con Razor, otra que esta obvia que he mencionado aquí? Gracias

+2

False choice. Puedes usar Razor en un SPA. Tal vez no tanto. –

+3

Usaremos Razor por primera vez en cargar la página sin datos, todas las demás solicitudes se realizarán con la ayuda de Ajax + JSON, MS SPA no implica el uso de Razor para la carga de datos – YMC

+4

"prons". Lol, creo que debería ser la nueva palabra de reemplazo para "pros y contras". – Dan

Respuesta

4

Creo que parece que ya están bastante bien informados de la mayoría de las compensaciones aquí; tendrá una carga de red reducida con SPA y cambiará una medida del procesamiento al cliente. Sin embargo, aumentará la complejidad de su código y hará que sea un poco más difícil mantener el sistema fácilmente (simplemente debido a la mayor complejidad, no debido a ningún problema arquitectónico inherente al SPA).

Otra cosa a tener en cuenta es la compatibilidad. La razón por la que mencioné una "opción falsa" en mi comentario a su pregunta es que para mantener el sitio utilizable para las personas con Javascript deshabilitado, aún deberá proporcionar vistas regulares de toda la página. Esta es también una buena idea para hacer por el bien de SEO; un rastreador explorará su sitio como un usuario con JS deshabilitado, y luego podrá indexar su sitio. El sitio debe manejar dichas URL entrantes correctamente para que las personas con JS habilitadas se encuentren en su SPA mirando el mismo contenido (en lugar de ser arrojados a la vista "no JS" innecesariamente).

Hay algo más que mencionaré como una posibilidad que podría ayudar con lo anterior, pero rompe los ideales de un SPA; es decir, utilizando parciales cargados de Ajax en algunos lugares, en lugar de datos JSON. Por ejemplo, supongamos que tiene un formulario típico de "contacto de correo electrónico" en el sitio; usted quiere que se cargue dentro del contexto del SPA, pero probablemente sea más fácil hacerlo cargando el parcial a través de AJAX. (Aunque ciertamente, sí, podría hacerlo con un objeto JSON que describa los campos para mostrar en el formulario de correo electrónico).

También es probable que haya contenido que es más "contenido" que "datos", que aún puede desear cargar a través de parciales y Ajax.


Un SPA es definitivamente un proyecto interesante, y estoy a punto de implementar uno yo mismo. He usado una mezcla de JSON y parciales, pero puede que esa no sea tu elección.

+1

No veo una reducción en la carga de la red. Si carga 50 registros, no importa si se carga por adelantado o según sea necesario. El volumen es el mismo El beneficio abarca la carga durante un período de tiempo mayor. Esto se mueve hacia un enfoque más a pedido. –

+14

@ChuckConway Cargar 50 registros a través de JSON es definitivamente menos transferencia de red que cargar una página HTML que tenga todo el resto del formato, diseño y otros registros * plus * 50. –

+2

Si está actualizando la página ENTERA. Sí, estás en lo correcto. Si solo está cargando a través de JSON, entonces no, no lo está. –

17

Razor es una tecnología basada en servidor donde SPA (aplicación de página única) es un enfoque de arquitectura utilizado en el cliente (navegador web). Ambos se pueden usar juntos.

Desde un nivel alto, SPA mueve la representación y la recuperación de datos al cliente. El servidor web se convierte en un nivel de servicios ubicado frente a la base de datos. Un patrón MVC funciona mejor cuando se usa SPA. Frameworks como Knockout.js y Backbone.js se pueden usar para esto. Los resultados netos son una experiencia de escritorio de gran capacidad de respuesta.

Para lograr esto, tendrá que ser un programador de javascript de descenso o estar dispuesto a aprender javascript.

Sí, está cambiando los requisitos comerciales de C# a javascript. En Visual Studio, el sentido de la inteligencia es limitado para javascript.Para tener confianza en su javascript tendrá que apoyarse en pruebas unitarias. La parte positiva es la rica experiencia del usuario (piense en gmail o google maps).

Cuestiones relacionadas