webform visual net mvc framework crear asp aplicaciones aplicacion .net asp.net-mvc performance iis

visual - ¿Cómo puedo mejorar el rendimiento de la aplicación ASP.NET MVC?



framework asp net (16)

  1. Implementar Gzip.
  2. Utilice la representación asíncrona para vistas parciales.
  3. Minimizar los golpes de base de datos.
  4. Utilice una consulta compilada.
  5. Ejecute un perfilador y descubra golpes innecesarios. Optimice todos los procedimientos almacenados que toman más de 1 segundo para devolver una respuesta.
  6. Utilice el almacenamiento en caché.
  7. Utilice la optimización de la minificación de paquetes .
  8. Use utilidades HTML 5 como caché de sesión y almacenamiento local para contenidos de solo lectura.

¿Cómo mejora el rendimiento de su aplicación ASP.NET MVC?


1: Obtener tiempos. Hasta que sepa dónde está la desaceleración, la pregunta es demasiado amplia para responderla. Un proyecto en el que estoy trabajando tiene este problema preciso; No hay registro para saber cuánto tardan ciertas cosas; Solo podemos adivinar las partes lentas de la aplicación hasta que agreguemos tiempos al proyecto.

2: Si tiene operaciones secuenciales, no tenga miedo de multihilo ligeramente. ESPECIALMENTE si se trata de operaciones de bloqueo. PLINQ es tu amigo aquí.

3: pregenerate tus vistas de MVC cuando publiques ... Eso te ayudará con algunos de los "primeros éxitos de página"

4: Algunos argumentan por el procedimiento almacenado / ADO ventajas de velocidad. Otros abogan por la velocidad de desarrollo de EF y una mejor definición de niveles y su propósito. He visto diseños realmente lentos cuando SQL y las soluciones alternativas para usar Sprocs / Views para la recuperación y el almacenamiento de datos. Además, su dificultad para probar aumenta. Nuestra base de código actual que estamos convirtiendo de ADO a EF no está funcionando peor (y en algunos casos es mejor) que el modelo antiguo enrollado a mano.

5: Dicho esto, piensa en la aplicación Warmup. Parte de lo que hacemos para ayudar a eliminar la mayoría de nuestros problemas de rendimiento EF fue agregar un método de calentamiento especial. No precompila ninguna consulta ni nada, pero ayuda con gran parte de la carga / generación de metadatos. Esto puede ser aún más importante cuando se trata de modelos de Code First.

6: Como han dicho otros, no utilice el estado de sesión o ViewState si es posible. No son necesariamente optimizaciones de rendimiento en las que los desarrolladores piensan, pero una vez que comienzas a escribir aplicaciones web más complejas, deseas capacidad de respuesta. El estado de sesión excluye esto. Imagina una consulta de larga duración. Decides abrir una nueva ventana y probar una menos compleja. Bien, es posible que haya esperado con el estado de sesión activado, porque el servidor esperará hasta que se realice la primera solicitud antes de pasar a la siguiente para esa sesión.

7: Minimizar viajes de ida y vuelta a la base de datos. Guarda cosas que utilizas con frecuencia pero que no cambiarán de manera realista a tu caché .Net. Trate de agrupar sus inserciones / actualizaciones cuando sea posible.

7.1: Evite el código de acceso a datos en sus vistas de Razor sin una buena razón. No estaría diciendo esto si no lo hubiera visto. Ya estaban accediendo a sus datos cuando armaron el modelo, ¿por qué demonios no lo incluían en el modelo?


A continuación una lista compilada de posibles fuentes de mejora:

General

  • Utilice un generador de perfiles para descubrir fugas de memoria y problemas de rendimiento en su aplicación. personalmente te sugiero dotTrace
  • Ejecute su sitio en modo de lanzamiento, no en modo de depuración, cuando esté en producción, y también durante el perfilado de rendimiento. El modo de liberación es mucho más rápido. El modo de depuración puede ocultar problemas de rendimiento en su propio código.

Almacenamiento en caché

  • Utilice CompiledQuery.Compile() recursivamente evitando la recompilación de sus expresiones de consulta
  • Almacene en caché el contenido que no es propenso a cambiar utilizando OutputCacheAttribute para guardar ejecuciones innecesarias y de acción
  • Utilizar cookies para la información no confidencial de acceso frecuente.
  • Utilice ETags y vencimiento: escriba sus métodos personalizados de ActionResult si es necesario
  • Considere utilizar RouteName para organizar sus rutas y luego utilícela para generar sus enlaces, y trate de no usar el método ActionLink basado en el árbol de expresiones.
  • Considere implementar una estrategia de almacenamiento en caché de resolución de ruta
  • Ponga código repetitivo dentro de sus PartialViews , evite renderizarlo xxxx veces: si termina llamando las mismas 300 veces parciales en la misma vista, probablemente haya algo de malo en eso. Explicación y puntos de referencia

Enrutamiento

Seguridad

  • Utilice la autenticación de formularios, mantenga sus datos confidenciales a los que se accede con frecuencia en el ticket de autenticación

DAL

Balanceo de carga

  • Utilice proxies inversos para distribuir la carga del cliente en su instancia de aplicación. ( utiliza HAProxy ( MSDN ).

  • Utilice los controladores asíncronos para implementar acciones que dependen del procesamiento de recursos externos.

Lado del cliente

  • Optimice su lado del cliente, use una herramienta como YSlow para sugerencias para mejorar el rendimiento
  • Use AJAX para actualizar los componentes de su interfaz de usuario, evite una actualización de toda la página cuando sea posible.
  • Considere implementar una arquitectura pub-sub, es decir, Comet, para la entrega de contenido contra la recarga basada en tiempos de espera.
  • Mueva la lógica de generación de gráficos y gráficos al lado del cliente si es posible. La generación de gráficos es una actividad costosa. Aplazar el lado del cliente de su servidor de una carga innecesaria, y le permite trabajar con gráficos localmente sin realizar una nueva solicitud (es decir, Flex charting, jqbargraph , MoreJqueryCharts ).
  • Utilice CDN para scripts y contenido multimedia para mejorar la carga en el lado del cliente (es decir, CDN de Google )
  • Minify - Compile - su JavaScript para mejorar el tamaño de su script
  • Mantenga el tamaño de las cookies pequeño, ya que las cookies se envían al servidor en cada solicitud.
  • Considere el uso de DNS y la búsqueda previa de enlaces cuando sea posible.

Configuración global

  • Si usa Razor, agregue el siguiente código en su global.asax.cs, de manera predeterminada, Asp.Net MVC procesa con un motor aspx y un motor de afeitar. Esto solo utiliza el RazorViewEngine.

    ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new RazorViewEngine());

  • Agregue gzip (compresión HTTP) y caché estático (imágenes, css, ...) en su web.config <system.webServer> <urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true"/> </system.webServer>

  • Eliminar módulos HTTP no utilizados
  • Vacíe su HTML tan pronto como se genere (en su web.config) y desactive viewstate si no lo está utilizando <pages buffer="true" enableViewState="false">

Además de toda la gran información sobre la optimización de su aplicación en el lado del servidor, diría que debería echar un vistazo a YSlow . Es un excelente recurso para mejorar el rendimiento del sitio en el lado del cliente.

Esto se aplica a todos los sitios, no solo a ASP.NET MVC.


Además, si usa NHibernate , puede activar y configurar el caché de segundo nivel para consultas y agregar el alcance y el tiempo de espera de las consultas. Y hay un generador de perfiles para EF , L2S y NHibernate: http://hibernatingrhinos.com/products/UberProf . Te ayudará a sintonizar tus consultas.



En su clamor para optimizar el lado del cliente, no se olvide de la capa de base de datos. Tuvimos una aplicación que pasó de 5 segundos a cargar hasta 50 segundos durante la noche.

En la inspección, habíamos hecho un montón de cambios de esquema. Una vez que actualizamos las estadísticas, de repente se volvió tan receptivo como antes.


Esto puede parecer obvio, pero ejecute su sitio en modo de lanzamiento, no en modo de depuración, cuando esté en producción y también durante el perfilado de rendimiento. El modo de liberación es mucho más rápido. El modo de depuración puede ocultar problemas de rendimiento en su propio código.


La sugerencia básica es seguir los principios REST y los siguientes puntos vinculan algunos de estos principios con el marco MVC de ASP.NET:

  1. Haga que sus controladores se stateless : se trata más bien de una sugerencia de ''rendimiento / escalabilidad web '' (a diferencia del rendimiento a nivel de micro / máquina) y una decisión de diseño importante que afectaría el futuro de sus aplicaciones, especialmente en caso de que sea popular o si necesita algo. tolerancia a fallos por ejemplo.
    • No utilizar sesiones
    • No use tempdata - que usa sesiones
    • No intente ''cachear'' todo ''prematuramente''.
  2. Usar autenticación de formularios
    • Mantenga sus datos confidenciales de acceso frecuente en el ticket de autenticación
  3. Utilizar cookies para la información no confidencial de acceso frecuente.
  4. Haga que sus stateless en la web.
  5. Compila tu JavaScript. Compile ( también hay otros, solo busca ''compilador de JavaScript'' )
  6. Utilice CDN (red de entrega de contenido), especialmente para sus grandes archivos multimedia, etc.
  7. Considere diferentes tipos de almacenamiento para sus datos, por ejemplo, archivos, almacenes de clave / valor, etc., no solo SQL Server
  8. Por último, pero no menos importante, prueba tu sitio web para el rendimiento

Lo siguiente son cosas que hacer

  1. Modo kernel caché
  2. Modo pipeline
  3. Eliminar módulos no utilizados
  4. runAllManagedModulesForAllRequests
  5. No escribas en wwwroot
  6. Eliminar los motores de vista y el lenguaje no utilizados

No es una optimización que rompa la tierra, pero pensé que lo tiraría por ahí: usar CDN''s para jQuery, etc.

Cita del propio ScottGu: El CDN Microsoft Ajax le permite mejorar significativamente el rendimiento de las aplicaciones Web Forms y ASP.NET MVC de ASP.NET que usan ASP.NET AJAX o jQuery. El servicio está disponible de forma gratuita, no requiere ningún registro y se puede utilizar para fines comerciales y no comerciales.

Incluso usamos el CDN para nuestros componentes web en Moss que usan jQuery.


Sólo quería añadir mis 2 centavos. La forma MÁS efectiva de optimizar la generación de rutas de URL en una aplicación MVC es ... no generarlas en absoluto.

La mayoría de nosotros más o menos sabemos cómo se generan las URL en nuestras aplicaciones de todos modos, así que simplemente usando Url.Content("~/Blahblah") estático Url.Content("~/Blahblah") lugar de Url.Action() o Url.RouteUrl() cuando sea posible, vence a todos los demás métodos Por casi 20 veces e incluso más.

PD. He analizado un par de miles de iteraciones y he publicado resultados en mi blog si estoy interesado.


También añadiré:

  1. Use Sprites : Los Sprites son una gran cosa para reducir una solicitud. Combinas todas tus imágenes en una sola y usas CSS para llegar a buena parte del sprite. Microsoft proporciona una buena biblioteca para hacerlo: Sprite y Image Optimization Preview 4 .

  2. Almacenar en caché el objeto de su servidor : si tiene algunas listas de referencias o datos que cambiarán raramente, puede almacenarlos en la memoria en lugar de consultar la base de datos cada vez.

  3. Use ADO.NET en lugar de Entity Framework : EF4 or EF5 son excelentes para reducir el tiempo de desarrollo, pero será difícil optimizarlo. Es más simple optimizar un procedimiento almacenado que Entity Framework. Así que debes usar los procedimientos de la tienda tanto como sea posible. Dapper proporciona una forma sencilla de consultar y asignar SQL con muy buen rendimiento.

  4. Página de la memoria caché o página parcial : MVC proporciona un filtro fácil para la página de la memoria caché de acuerdo con algunos parámetros, así que úselo.

  5. Reducir las llamadas a la base de datos : puede crear una solicitud de base de datos única que devuelva varios objetos. Compruebe en el sitio web de Dapper.

  6. Siempre tenga una arquitectura limpia : tenga una arquitectura de n niveles limpia, incluso en un proyecto pequeño. Le ayudará a mantener limpio su código, y será más fácil optimizarlo si es necesario.

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


Una cosa muy fácil de hacer es pensar de forma asíncrona al acceder a los datos que desea para la página. Ya sea que esté leyendo un servicio web, un archivo, una base de datos o algo más, use el modelo asíncrono tanto como sea posible. Si bien no necesariamente ayudará a que una página sea más rápida, ayudará a que su servidor funcione mejor en general.


Usar Bundling y Minification también te ayuda a mejorar el rendimiento. Básicamente reduce el tiempo de carga de la página.


Code Climber y esta entrada de blog proporcionan formas detalladas de aumentar el rendimiento de la aplicación.

La consulta compilada aumentará el rendimiento de su aplicación, pero no tiene nada en común con ASP.NET MVC. Se acelerará cada aplicación de db, por lo que no se trata realmente de MVC.