2011-12-16 7 views
9

Acabo de conectar el mvc-mini-profiler (¡gracias!) En mi sitio y estaba mirando para ver qué tan bien lo he hecho hasta este punto (es mi primera gran pelea con linq para entidades y mvc). Hasta ahora todo se ve bien, sin embargo, siempre estoy buscando formas de mejorar los tiempos de respuesta. En este punto, parece que el único impulso importante que podría obtener sería reducir el tiempo que lleva renderizar las vistas individuales en cada una de mis páginas.MVC Render Speedup

profiler screeny

Se puede ver en mi screeny que la entrega de la vista Blog es la tarea más larga duración. Sé que 30ms ya es muy rápido, pero apuesto a que todavía hay algunos trucos que puedo utilizar para obtener estos números aún más bajos.

Entonces la pregunta es: ¿Cómo puedo reducir el tiempo de renderización? Sé que el almacenamiento en caché de vistas dinámicas en algo como el HttpRuntime.Cache puede ayudar, pero incluso estoy viendo varias duraciones de ms para la visualización de vistas estáticas. ¿Qué técnicas usas para reducir los tiempos de renderizado de tus vistas?

+0

¿Está construyendo objetos en la vista desde el DB? Es difícil ofrecer sugerencias sin ninguna idea de lo que está sucediendo en su código. –

+0

Puedes volver a realizar la prueba, pero asegúrate de ejecutar la aplicación MVC en "Release". ¿Qué tan complejo es 'Blog'? ¿Está llamando a múltiples acciones o parciales de niños? – Omar

+0

@TravisJ En algunos de ellos, sí. En otros solo estoy obteniendo vistas estáticas. – JesseBuesking

Respuesta

3

sugiero 2 cosas (si no se ha hecho todavía) ...

  1. Retire ViewEngines no utilizados. Por lo tanto, si su proyecto solo usa el motor de vista de afeitar, haga esto en el archivo.asax global en Application_Start();

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

    o

    ViewEngines.Engines.Add(new WebFormViewEngine()); 
    

    si se utiliza el WebFormsViewEngine única

  2. El mayor Improvment es utilizar el OutputCacheAttribute para almacenar en caché el html. No creo que tu blog cambia en cada Solicitud;)

    public class BlogController : Controller 
    { 
        [OutputCache] 
        public ActionResult Index() 
        { 
         // do something here 
         return View(); 
        } 
    } 
    

puede establecer el caché de duración y más. Hora de salida: MSDN - OutputCacheAttribute.

+0

¿Qué causaría '[OutputCache]' ignorar el almacenamiento en caché?Cuando establezco la duración en 60, parece que lleva más tiempo para cada momento después de la primera renderización (el tiempo en cada renderización es igual al tiempo tomado para la primera renderización: parece que se está recompilando cada vez). – JesseBuesking

+0

No es muy claro a qué te refieres (demasiado cansado quizás);). Ponga un punto de interrupción en su "vista de retorno()" para verificar si su configuración de atributo de caché funciona. ¿Sin ganancia de rendimiento? Debería haber un mejor tiempo de carga. Por favor, respuesta, porque esto debería funcionar. – dknaack

+0

Voy a echar un vistazo a esto cuando haya terminado en el trabajo. De hecho, estoy pensando que ** se verá ** como si funcionara con la misma lentitud, pero de hecho los resultados del miniperfil también se están guardando en caché. Me reiré si eso es todo. También solo uso navaja de afeitar, así que probaré el impacto de tu primera sugerencia mientras estoy en ello. – JesseBuesking