Usar cache para mejorar rendimiento en ASP.NET MVC

Como desarrolladores debemos estar al tanto del rendimiento que tienen nuestras aplicaciones ASP.NET MVC. Y son muchos los casos en los que debemos afrontar modificaciones para lograr una mejora en el uso de la misma.

Algunas veces esto es parte de los requerimientos iniciales, en los que de forma inicial ya se conoce que habrá una alta demanda, o hay recursos particulares que pueden verse degradados en determinadas situaciones. Otras veces empezamos a mejorar estos aspectos una vez que la aplicación está funcionando correctamente en un entorno productivo.

Independientemente de cual sea el motivo, tenemos una alternativa que nos puede significar una gran mejora en el rendimiento de nuestras aplicaciones: Cache. En general tenemos distintos puntos de nuestra aplicación ASP.NET MVC en donde podemos aplicar cache, de forma que logremos mejorar su rendimiento.

Veamos cada una de las alternativas:

Cache del resultado de acciones:

Un navegador web puede mantener en cache el resultado de una petición HTTP GET por un tiempo predefinido. Obviamente, esto permite que la próxima vez que se requiera la utilización de dicho contenido, el navegador utilice su versión local en vez de solicitarla al servidor. Implementar esto en nuestra aplicación ASP.NET MVC es muy sencillo, tan solo debemos aplicar el atributo OutputCache en las acciones de nuestros controladores a las cuales querramos aplicar cache:

Cache - Atributo OutputCache
Atributo OutputCache

A través de este atributo podemos definir que el almacenamiento de cache también se realice en el servidor, permitiendo lograr una mejora mucho mayor en el rendimiento. Hay otras configuraciones que podemos lograr con el uso de este atributo, la cual merece un post particular para ello.

A su vez, dentro del cache del resultado de las acciones, tenemos dos tipos puntuales orientados específicamente a páginas:

Donut Cache

El uso de OutputCache es ideal cuando tenemos que establecer el almacenamiento en cache de toda una página. Supongamos que tenemos una página a la cual queremos configurarle cache, excepto ciertas partes que la componen que son dinámicas. Es aquí donde necesitamos una alternativa particular para esto.

Donut cache es una tecnología que se ejecuta del lado del servidor, la cual nos permite mantener en cache toda la página excepto ciertas partes que serán dinámicas. Donut Cache está soportada en ASP.NET Web Forms, pero no en ASP.NET MVC. Sin embargo, mediante el método HttpResponse.WriteSubstitution es posible crear un helper que lo aplique.

Donut Hole Cache

El enfoque es el inverso al anterior: tenemos una página dinámica que no queremos mantener en cache, pero la misma si tiene ciertas partes estáticas para las cuales queremos aplicarlo. A diferencia de Donut Cache, esta alternativa si está soportada en ASP.NET MVC. Para aplicarla, debemos colocar los atributos ChildActionOnly OutputCache sobre la acción de la vista parcial a la cual queremos aplicarle cache:

Cache - DonutHoleCache
Donut Hole Cache para vistas parciales

 

Cache de Datos:

Un punto que siempre es crítico en el funcionamiento de nuestras aplicaciones es el acceso a datos. Dependiendo de la criticidad de nuestra aplicación y la necesidad de mejorar el rendimiento en este aspecto, puede que sea necesario aplicar cache a nivel de datos. Para ello a partir de la versión 4 del Framework .NET contamos con un amplio soporte bajo el espacio de nombres System.Runtime.Caching.

El mismo nos permite contar con ObjectCache y MemoryCache, de forma que podamos agregar objetos a cache por un período de tiempo determinado. A su vez, dependiendo de la implementación que querramos realizar, podemos hasta crear un CacheProdiver (el cual deberá heredar de ICacheProvider) que sea una capa intermedia entre la de negocios y datos.

 

Con estas alternativas podemos lograr una mejora en el rendimiento muy grande, aunque también hay que ser conscientes de que una incorrecta implementación de la misma puede traer efectos indeseados en el uso de la aplicación. Esto implica una planificación de la implementación de cache, analizando cada caso en particular.

En próximos posts iremos viendo en mayor detalle algunos aspectos particulares de las alternativas mencionadas anteriormente.

Gracias por leer!!

Anuncios

2 comentarios en “Usar cache para mejorar rendimiento en ASP.NET MVC

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s