Rendimiento de ASP.NET MVC

102

Encontré algunos comentarios descabellados de que ASP.NET MVC es 30 veces más rápido que ASP.NET WebForms. ¿Qué diferencia real de rendimiento hay? ¿Se ha medido y cuáles son los beneficios de rendimiento?

Esto es para ayudarme a considerar pasar de ASP.NET WebForms a ASP.NET MVC.

GEOCHET
fuente
20
Después de trabajar con WebForms desde que salieron, ¡nunca volveré voluntariamente! MVC ha robado mi <3, ¡y este sitio funciona increíblemente en Beta 5!
Jarrod Dixon
2
¿Qué pasa con todas las reversiones de revisión en esta pregunta ...?
Nick
@Nick: El OP está deshaciendo cualquiera de las ediciones y eliminando cualquier comentario que las explique.
GEOCHET
@Rich B: Correcto, borró alrededor de 5 de mis comentarios.
George Stocker
2
Necesita una actualización ahora que nos estamos acercando al lanzamiento de MVC3.
Andrew Lewis

Respuestas:

69

No hemos realizado el tipo de pruebas de escalabilidad y rendimiento necesarias para llegar a conclusiones. Creo que ScottGu pudo haber estado discutiendo posibles objetivos de rendimiento. A medida que avanzamos hacia Beta y RTM, internamente realizaremos más pruebas de rendimiento. Sin embargo, no estoy seguro de cuál es nuestra política sobre la publicación de resultados de pruebas de rendimiento.

En cualquier caso, estas pruebas realmente deben considerar aplicaciones del mundo real ...

Pirateado
fuente
13
Ahora que se ha lanzado MVC, ¿hay alguna actualización sobre la publicación de los resultados de rendimiento?
chris
6
Solo votando esto porque la puntuación de 5,999 repeticiones antes me estaba lastimando los ojos :(
Damien
2
En este momento, seguramente debe tener algunos números. ¿Quieres actualizar tu respuesta? ¿O descubrió que la molesta política lo prohíbe?
tvanfosson
7
El número es 42. :) En general, nuestros números probablemente serán inútiles para las aplicaciones del mundo real, por lo que, por regla general, no los divulgamos. Sin embargo, conozco otros equipos de Microsoft que crean sitios web a gran escala que muestran cifras favorables. En otras palabras, es más probable que cualquier problema de rendimiento se deba a errores del programador que a problemas heredados en el marco. Normalmente, las interacciones con la base de datos y los servicios externos son los culpables. :)
Pirateado el
¡Cierto! ¡Actualiza esto! Tal vez no sean puntos de referencia, sino una breve idea, ¿están a la par o mvc es un poco mejor en rendimiento?
gideon
48

Creo que esta será una pregunta difícil de responder definitivamente, ya que mucho dependerá de A) cómo implemente la aplicación WebForms y B) cómo implemente la aplicación MVC. En sus formas "sin procesar", MVC es probablemente más rápido que WebForms, pero años y años de herramientas y experiencia han producido una serie de técnicas para crear aplicaciones WebForms rápidas. Apostaría a que un desarrollador de ASP.NET senior podría producir una aplicación WebForms que compita con la velocidad de cualquier aplicación MVC, o al menos lograr una diferencia insignificante.

La verdadera diferencia, como sugirió @tvanfosson , está en la capacidad de prueba y el SoC limpio. Si mejorar el rendimiento es su principal preocupación, no creo que sea una buena razón para abandonar WebForms y comenzar a reconstruir en MVC. No al menos hasta que haya probado las técnicas disponibles para optimizar WebForms.

Todd
fuente
Gran respuesta Todd (qué sorprendente para un evangelista desarrollador tener una respuesta pragmática). Lo único que se equivocó es que el formulario web de implementaciones en bruto es sustancialmente más rápido.
Chris Marisic
42

Disminuyó una de mis páginas de 2 MB de carga útil a 200k, simplemente eliminando el estado de visualización y haciéndolo soportable programáticamente para trabajar con la salida enviada.

El tamaño por sí solo, aunque el procesamiento fue el mismo, creará grandes mejoras en las conexiones por segundo y la velocidad de las solicitudes.

DesarrollandoChris
fuente
31
también podría haber arreglado ese molesto estado de vista grande sin MVC
Andrei Rînea
1
Solo para elaborar, ViewState puede desactivarse a nivel de página o en web.config
bbqchickenrobot
8
sí, pero en mvc es una decisión sensata por defecto, no una decisión de diseño que te obliga a dejar todos los controles y los proveedores que dicen que solo trabajan en formularios web, haciendo que los formularios web se "comporten mal" al eliminar su columna vertebral. No estoy en desacuerdo con que podría volver a codificar esa página, pero toda la aplicación era mejor sin viewstate.
DevelopingChris
entonces, ¿no crees que es la peor decisión tuya portar toda la aplicación a MVC en lugar de apagar el estado de visualización en web.config? y no, viewstate no es la columna vertebral. solo si ha investigado, viewstate se puede mantener en la memoria caché y en las sesiones.
Simple Fellow
29

Creo que muchas de las personas que piensan que los WebForms son inherentemente lentos o que requieren muchos recursos, están echando la culpa al lugar equivocado. 9 de cada 10 veces, cuando me contratan para optimizar una aplicación de formularios web, hay demasiados lugares donde los autores de las aplicaciones malinterpretan el propósito del estado de visualización. No estoy diciendo que el estado de visualización sea perfecto ni nada, pero es MUY fácil abusar de él, y es este abuso el que está causando el campo de visualización inflado.

Este artículo fue invaluable para ayudarme a comprender muchos de estos abusos. https://weblogs.asp.net/infinitiesloop/truly-understanding-viewstate

Para hacer una comparación válida entre MVC y WebForms, debemos estar seguros de que ambas aplicaciones estén usando las arquitecturas correctamente.

Ariel
fuente
14

Mi prueba muestra algo entre 2x y 7x más de solicitudes / seg en MVC, pero depende de cómo construya su aplicación de formularios web. Con solo el texto "hola mundo", sin ningún control del lado del servidor, mvc es entre un 30 y un 50% más rápido.

Hrvoje Hudo
fuente
12

Para mí, la mejora real del "rendimiento" en MVC es el aumento de la superficie comprobable de la aplicación. Con WebForms, muchas de las aplicaciones eran difíciles de probar. Con MVC, la cantidad de código que se puede probar básicamente se duplica. Básicamente, todo lo que no se puede probar fácilmente es el código que genera el diseño. Toda su lógica empresarial y lógica de acceso a datos, incluida la lógica que completa los datos reales utilizados en la vista, ahora se puede probar. Si bien espero que también tenga más rendimiento (el ciclo de vida de la página se simplifica mucho y se adapta mejor a la programación web), incluso si fuera el mismo o un poco más lento, valdría la pena cambiarlo desde una perspectiva de calidad.

tvanfosson
fuente
Realmente me encantaría saber por qué alguien votó en contra de esta respuesta.
tvanfosson
Mi sensación es que podría ser rechazada porque una aplicación de formularios web ASP.NET bien diseñada es tan comprobable como una aplicación MVC. Mi experiencia con el desarrollo de ambos es que MVC te obliga a adoptar un modelo de programación limpio (que es una de sus mayores fortalezas, en mi opinión). Los formularios web le permiten hacer cosas más perezosas, pero aún es muy posible tener la misma superficie comprobable en los formularios web. De todos modos, esa es mi suposición.
dudemonkey
Las vistas Razor fomentan literalmente la incrustación de código dentro de la vista. Eso no es comprobable y no es un buen augurio para la separación de preocupaciones. El hecho de que MVC te haga escribir controladores no significa que no puedas hacerlo todo si no sabes lo que estás haciendo. Un desarrollador experto obtendrá el mismo rendimiento de WebForms (o más) que MVC, y tendrá una "superficie comprobable" prácticamente idéntica.
Richard Hauer
@RichardHauer eso no era literalmente cierto cuando escribí esto, pero lo han mejorado. Dado que WebForms no parece tener futuro en .NET Core, parece ser un punto discutible.
tvanfosson
@tvanfosson De acuerdo, ahora es discutible. No estás seguro de qué parte crees que no es cierta, ¿quizás te opones a que use "literalmente"? De todos modos, las versiones más nuevas de MVC con TagHelpers ayudan a romper el hábito de poner código en diseños que finalmente podrían hacer que todo funcione para mí. Aprecio que esta publicación es bastante antigua, por supuesto, pero incluso en ese momento, un formulario WebForms bien construido es muy rápido sin el "cableado mágico" de MVC y sin código incrustado en la vista.
Richard Hauer
7

Creo que el problema aquí es que no importa cuánto más rápido sea ASP.Net MVC que los formularios web antiguos, no hará una diferencia, porque la mayor parte del tiempo que se toma es en la base de datos. La mayoría de las veces, sus servidores web estarán sentados en un 0-10% de uso de CPU esperando en su servidor de base de datos. A menos que obtenga una gran cantidad de visitas en su sitio web y su base de datos sea extremadamente rápida, probablemente no notará una gran diferencia.

Kibbee
fuente
Sus usuarios podrían - no viewstate.
UpTheCreek
6

Los únicos números concretos que puedo encontrar que son del desarrollo temprano de ASP.NET MVC están en este hilo del foro:

http://forums.asp.net/p/1231621/2224136.aspx

El propio Rob Connery confirma de alguna manera la declaración de que ScottGu ha afirmado que ASP.NET MVC puede atender 8000 solicitudes por segundo.

Quizás Jeff y su equipo puedan dar algún tipo de pista sobre el desarrollo de este sitio.

Seb Nilsson
fuente
3

Contrariamente a la opinión aceptada, el uso optimizado de formularios web mata por completo a MVC en términos de rendimiento bruto. Webforms se ha hiperoptimizado para la tarea de servir html durante mucho más tiempo que MVC.

Las métricas están disponibles en http://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=db

Cada mvc de comparación se encuentra en las clasificaciones medio-bajo / bajo-alto de la lista, mientras que el uso de formularios web optimizados se ubica en las clasificaciones medio-alto / alto-bajo.

Una validación anecdótica pero muy seria de estas métricas, www.microsoft.com es servida por formularios web, no MVC. ¿Alguien aquí cree que no habría elegido MVC si fuera empíricamente más rápido?

Chris Marisic
fuente
2

Realmente no hay forma de responder a esto. MVC usa el motor de visualización de formularios Web Forms de forma predeterminada y se puede configurar para usar cualquier número de motores de visualización personalizados, por lo que si desea una comparación de rendimiento, tendrá que ser más específico.

Gerald
fuente
2

Comencé a trabajar en MVC hace aproximadamente un año, estaba inspirado pero no impresionado.

Detesto el estado de la vista y lo veo como la raíz de todos los males en términos de ASP.NET. Es por eso que simplemente no lo uso y, para ser perfectamente honesto, ¿por qué lo harías tú?

Básicamente, tomé el concepto de ASP.NET MVC Framework y lo construí a mi manera. Sin embargo, cambié un par de cosas. Construí el código de envoltura de mi controlador o el código de enrutamiento de URL en torno a la recompilación dinámica.

Ahora, iría tan lejos como para decir que las aplicaciones ASP.NET MVC serán más rápidas según cómo las use. Si abandona por completo los WebForms, será más rápido porque el ciclo de vida de ASP.NET y el modelo de objetos son enormes.

Cuando escribes, estás creando una instancia de un ejército ... no, espera, una legión de objetos que participarán en la representación de tu vista. Esto será más lento que si expresara la cantidad mínima de comportamiento en la propia página ASPX. (No me importa la abstracción del motor de vista porque el soporte para páginas ASPX en Visual Studio es decente, pero he eliminado por completo WebForms como concepto y básicamente cualquier marco ASP.NET debido al exceso de código o al no poder cambiar el cosas que conectan mi solicitud).

Encontré formas de confiar en la recompilación dinámica (System.Reflection.Emit) para emitir códigos y objetos de propósito especial cuando sea necesario. La ejecución de este código es más rápida que la reflexión, pero inicialmente se construyó a través del servicio de reflexión. Esto le ha dado a mi framework con sabor a MVC un gran rendimiento pero también muy tipado estáticamente. No uso cadenas y colecciones de pares de nombre / valor. En cambio, mis servicios de compilador personalizados van en una reescritura de una publicación de formulario a una acción de controlador que se pasa un tipo de referencia. Detrás de la escena están sucediendo muchas cosas, pero este código es rápido, mucho más rápido que WebForms o MVC Framework.

Además, no escribo URL, escribo expresiones lambda que se traducen en URL que luego indican qué acción de controlador invocar. Esto no es particularmente rápido, pero es mejor que tener URL rotas. Es como si tuvieras recursos de tipo estático así como objetos de tipo estático. ¿Una aplicación web de tipo estático? ¡Eso es lo que quiero!

Animaría a más personas a probar esto.

John Leidegren
fuente
2
¿Entonces esta no es una respuesta directa a la pregunta? Sin embargo, está relacionado y tiene un par de puntos buenos. Pero bueno, es algo que construí para mis propias necesidades y me queda perfectamente bien. También disfruto compartir mis ideas, aunque muy pocas personas entiendan por qué.
John Leidegren
1
Bueno, no tiene que cambiar su voto, pero no tiene que votar en contra, porque no es 'la' respuesta. Si echa un vistazo al texto, hay varias cosas que apuntan a que ASP.NET MVC es más rápido que WebForms y por qué ese es el caso. Y se reduce a cosas como la reflexión y el modelo de objetos y la sobrecarga de ViewState de WebForms.
John Leidegren
@John: ahora que MVC2 está disponible con enlace de modelo mejorado, validación, ayudantes fuertemente tipados, etc., ¿cómo lo evaluaría en comparación con su método?
tvanfosson
MVC2 es mucho mejor, creo que prácticamente ha reemplazado lo que estaba construyendo en ese momento (con MVC1 en beta). Me encontré con una gran experiencia de problemas en relación con lo que estaba tratando de construir sobre ASP.NET sin optar por las herramientas existentes. Basta decir que aprendí mucho y finalmente puse esto en producción. Ahora me doy cuenta de que las herramientas / marco actual (VS / ASP.NET / C #) no son realmente adecuadas para estas cosas y, eventualmente, si quieres seguir este camino, necesitarás invertir en tus propios compiladores / verificación de modelos. cosas para que algunas cosas funcionen a tu favor.
John Leidegren
No pensé mucho en ASP.NET MVC en ese momento. Le faltaron las cosas que sabía que quería. Pero tuve que pasar mucho tiempo desarrollando, probando y averiguando estas cosas. Sigo pensando que el aspecto estático del marco web que estaba construyendo es superior a MVC en ese sentido, pero el compilador de C # es ineficiente para resolver ese problema. Necesita algún lenguaje / compilador que permita una mayor flexibilidad cuando se trata de meta programación. Tuve que hacer mucho de eso en tiempo de ejecución y, a menudo, era imposible almacenar en caché las instancias compiladas, por lo que tuve que recompilar muchas cosas dinámicamente.
John Leidegren
2

Los proyectos creados con Visual Studio. Una es la plantilla mvc4, otra es WebForm (tradicional). Y cuando haga una prueba de carga con WCAT, este es el resultado,

MVC4 es bastante lento que WebForms, ¿alguna idea?

ingrese la descripción de la imagen aquí

MVC4

  • podría obtener alrededor de 11 rps
  • rps es bastante bajo en servidores de 2 o 4 cpu

ingrese la descripción de la imagen aquí

WebForms (aspx)

  • podría superar las 2500 rps

  • Se ha descubierto que el asesino del rendimiento es un error de MVC Bata o RC. Y el rendimiento mejorará una vez que elimine los paquetes. Ahora, la última versión solucionó esto.

jihe.wei
fuente
1

El rendimiento depende de lo que esté haciendo ... Por lo general, MVC es más rápido que asp.net principalmente porque Viewstate está ausente y porque MVC funciona más con la devolución de llamada que con la devolución de datos de forma predeterminada.

Si optimiza la página de su formulario web, puede tener el mismo rendimiento que MVC, pero supondrá mucho trabajo.

Además, hay muchos nugets para MVC (y también para Webform) para ayudarlo a mejorar el rendimiento del sitio web, como combinar y minimizar sus css y javascripts, agrupar sus imágenes y usarlas como un sprite, y así sucesivamente.

El rendimiento del sitio web depende en gran medida de su arquitectura. Uno limpio con una buena separación de preocupaciones le brindará un código más limpio y una mejor idea de cómo mejorar el rendimiento.

Puede echar un vistazo a esta plantilla "Plantilla Neos-SDI MVC " que creará para usted una arquitectura limpia con muchas mejoras de rendimiento de forma predeterminada (consulte el sitio web MvcTemplate ).

Jeff Lequeux
fuente
-1

ingrese la descripción de la imagen aquí

Hice un pequeño experimento de prueba de carga VSTS con un código básico y descubrí que el tiempo de respuesta de ASP.NET MVC era dos veces más rápido en comparación con ASP.NET Webforms. Arriba está el gráfico adjunto con la trama.

Puede leer este experimento de prueba de carga en detalle en este artículo de CP https://www.codeproject.com/Articles/864950/ASP-NET-MVC-vs-ASP-NET-WebForm-performance-compari

La prueba se realizó con las siguientes especificaciones utilizando VSTS y el software de prueba de carga telerik: -

Carga de usuarios 25 usuarios.

La duración de la ejecución de la prueba fue de 10 minutos.

Configuración de la máquina DELL 8 GB de RAM, Core i3

El proyecto se alojó en IIS 8.

El proyecto fue creado usando MVC 5.

Se asumió una conexión de red LAN. Por lo tanto, esta prueba no tiene en cuenta el retraso de la red por ahora.

El navegador en la prueba seleccionó Chrome e Internet Explorer.

Se tomaron varias lecturas durante la prueba para promediar eventos desconocidos. Se tomaron 7 lecturas y todas las lecturas se publican en este artículo como lectura 1, 2 y así sucesivamente.

Shivprasad Koirala
fuente
Su metodología de prueba es mala y muy sesgada, y sus conclusiones no son válidas. Una aplicación de WebForms construida correctamente se puede probar, tiene una separación adecuada de preocupaciones y tiene una carga útil mínima. Si bien MVC no tiene un ciclo de eventos de ciclo de vida de la página, tiene que lidiar con el enrutamiento y la ejecución de vistas. Sus artículos sobre este tema en PC están muy sesgados.
Richard Hauer
Una aplicación construida de manera adecuada y cuidadosa, incluso en la peor tecnología, haría milagros. El ciclo de vida de la página ASP.NET definitivamente tiene más carga útil en comparación con el enrutamiento y la ejecución de la vista, ya que se trata de la generación de UI HTML. El enrutamiento es parte del marco ASP.NET, por lo que incluso en formularios web normales existen. Una cosa en la que estoy de acuerdo si no escribe código detrás de su rendimiento será equivalente a MVC, pero la caja de herramientas de Webform es tan tentadora que el código subyacente se convierte en una parte integral de ella. Si bien MVC no me permite hacer eso en absoluto. Me encanta cómo en la maquinilla de afeitar han desactivado la vista de diseño y el código subyacente.
Shivprasad Koirala