Hace unos meses que empecé una nueva andadura profesional, que me ha tenido bastante ocupado, por lo que no he tenido tiempo de actualizar el blog con nuevo contenido, hasta ahora.

Últimamente, dedico mi tiempo profesional a trabajar con Sitecore, que es un CMS desarrollado en .Net, enfocado a grandes webs corporativas con grandes volúmenes de contenido y requisitos de personalización. Este CMS, a pesar de su complejidad, tiene un rendimiento notable, gracias a varios niveles de caché incorporados, que funcionan bastante bien.

Sin embargo, Sitecore permite añadir nuestro propio código, y, en este caso, obtener el mejor rendimiento nos corresponde a nosotros. Para ayudarnos en esta tarea, estoy utilizando MiniProfiler, que es un plugin para monitorizar aplicaciones web desarrolladas en .NET, muy útil para analizar el rendimiento de nuestras páginas en «tiempo real», sin la necesidad de indagar a posteriori en el log de Sitecore, o utilizar las herramientas de profiling que también nos ofrece. Además, está disponible como código abierto en GitHub: https://github.com/MiniProfiler

Lo que a priori parecía una tarea sencilla, «Instalar MiniProfiler en Sitecore», terminó necesitando cierto tiempo de investigación (aún me queda mucho Sitecore que aprender…), por lo que reproduzco a continuación los pasos necesarios para activar MiniProfiler en una instancia de Sitecore, en mi caso, la versión 6.6, aunque entiendo que será muy similar para cualquier versión posterior.

Instalar MiniProfiler en Sitecore

El primer paso, obvio, consiste en instalar MiniProfiler en nuestro proyecto. Para ello, la manera más sencilla es utilizar NuGet.

  1. Abrir la ventana de comandos de NuGet.
  2. Seleccionar en el desplegable de «Proyecto por defecto» el proyecto que contiene la aplicación web
  3. Ejecutar el comando: PM> Install-Package MiniProfiler

En este caso, estamos instalando la versión básica de MiniProfiler, suficiente para trabajar con ASP.NET WebForms. Podéis consultar en la web de MiniProfiler otras extensiones para MVC, EF, etc.

Configuración de MiniProfiler

A partir del proyecto de ejemplo para WebForms, podemos configurar fácilmente nuestra aplicación web.

Global.asax.cs:

  1. Añadir la configuración al archivo Global.asax.cs, que copiaremos de https://github.com/MiniProfiler/dotnet/blob/master/Sample.WebForms/Global.asax.cs
  2. En el método, recomiendo añadir las siguientes entradas a la lista de extensiones ignoradas por MiniProfiler, de manera que no apaezcan archivos estáticos ni las propias páginas de Sitecore:
    ignored.Add(".axd");
    ignored.Add(".xml");
    ignored.Add(".mp3");
    ignored.Add(".flv");
    ignored.Add(".js");
    ignored.Add(".css");
    ignored.Add(".gif");
    ignored.Add(".png");
    ignored.Add(".jpg");
    ignored.Add("~/media");
    ignored.Add("/sitecore/");

     

Web.Config:

  1. Comprobar que la sección <Modules> tiene el atributo runAllManagedModulesForAllRequests="true".
    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
    ...
    </modules>
    </system.webServer>​
     
  2. Añadir a la lista de URLs ignoradas por Sitecore la siguiente: /mini-profiler-resources, sin eliminar las de Sitecore.
    <setting name="IgnoreUrlPrefixes" value="/mini-profiler-resources|/sitecore/default.aspx|...">​
     
  3. Por último, nos queda añadir a nuestro(s) layout(s) el código que incluye los archivos JS necesarios para mostrar los resultados en pantalla, justo antes de la etiqueta </body>:
    <%= StackExchange.Profiling.MiniProfiler.RenderIncludes(useExistingjQuery:false) %>

A partir de este momento, publicamos los cambios en el site y ya debe de aparecernos la capa de timing que nos aporta MiniProfiler en la parte superior izquierda de nuestra web.