Output Caching Extensible con ASP.NET 4

Además del blog, podéis seguir a Scott en twitter: twitter.com/scottgu

Éste es el cuadragésimo post de una serie que estoy haciendo sobre VS 2010 y .NET 4. En el post de hoy veremos algunas de las mejoras en la extensibilidad del cache de salida de ASP.NET 4. Podemos usar esto en todas las aplicaciones ASP.NET 4 – tanto en las que estén hechas con Web Forms o MVC

Cache de salida hoy

ASP.NET 1.0 introdujo el concepto de cache de salida, que permite a los desarrolladores capturar y guardar salidas generadas de páginas, controles, controladores y respuestas HTTP en una memoria caché. En peticiones siguientes, ASP.NET puede servir el contenido más rápido obteniéndola y usandola de la caché en lugar que volver a ejecutar la página o el controlador para regenerar la salida desde cero. Esto puede mejorar dramáticamente el rendimiento de nuestra aplicación – especialmente en casos en los que el contenido está basado en datos de la base de datos (como el contenido es cacheado no tendremos que volver a hacer peticiones a la base de datos).

El sitema de cacheo de ASP.NET  es los suficientemente flexible para permitirnos cachear diferentes versiones de un contenido dependiendo de parámetros en la query o en el formulario a una páinga o contorlador(por ejemplo: Browse.aspx?Category=Beverages contra Browse.aspx= category=Meat). Tambien permite cachar diferentes versiones basándonos en el tipo de navegador o las preferenicas de lenguaje del usuario que visite nuestra aplicación. Esto nos permite cachar una versión mobile de una página por separado de una versión optimizada para un navegador de escritorio, así como variar las entradas de cache basándonos en si el usuario quiere leer la página en Inglés o en Francés. Podemos configurar ASP.NET para que cachee una salida particular durante un tiempo (por ejemplo: 1 minuto – después de ese tiempo la próxima versión regenerará el contenido y la volverá a cachear). TAmbién podemos configurar ASP.NET para que invalide una entrada de caché basándose en un evento externo (por ejepmlo: si el contenido de la base de datos que hemos cacheado ha cambiado).

Una limitación del sistema de cache de ASP.NET V1 –> 3.5, es que no es extensible – y el contenido cacheado siembre se guarda en memoria.

Extensibilidad de Output Cache de ASP.NET 4

ASP.NET 4 añade un punto de extensibilidad al output cache que permite a los desarrolaldores configurar uno o varios proveedores de cache. estos proveedores pueden usar cualquier mecanismo de almacenamiento para guardar el contenido de la cache (incluyendo discos locales o remotos, bases de datos, almacenamiento en la nube, y motores de cache distribuidos (como memcached o velocity).

Podemos crear providers de cache creando una clase que derive de System.Web.Caching.OutputCacheProvider de ASP.NET 4. En nuestra clase derivada tenemos que sobreescribir 4 métodos públicos que dan la funcionalidad de añadir/eliminar/obtener/actualizar el contenido de la cache (se pasa una clave única para identificar cada una de las entradas de la cache). Podemos configurar ASP.NET 4 para que use nuestro provider de cache registrandolo en la nueva sección <providers> del elemento <outputCache> en el web.config:

He añadido un nuevo provider de cache (que he llamado «SampleCache») que está implmentado usando la clase «ScottOutputCache» del assembly OutputCacheSample.dll. TAmbién he configurado ASP.NET par aque use la implementacion «SampleCache» como el sistema de cache por defecto cuando se cachee algún contenido – esto lo conseguimos marcando la propiedad defaultProvider en el elemento «outpuCache».

Y ahora, cuando añado una directiva OutputCAche en cualquier página .aspx el contenido será cacheado y guardado usando mi ScottOutputCache provider:

<%@ OutputCache Duration=»60″ VaryByParam=»None»  %>

De cualquier modo, si añado un atributo [OutputCache] en cualquier método de acción de un controlador de APS.NET MVC el contenido también se cacheará con mi proveedor:

Personalizar qué proveedor de cache usar

Hemos configurado que ASP.NET use mi proveedor de cahce por defecto cuando se cachee algo.

Como opción más avanzada, los desarrolladores también pueden configurar dinámicamente cómo ASP.NET va acachear, basándose en las condiciones que se quieran. Esto es útil en escenarios en los que queramos enriquecer la semántica de la caché. Por ejemplo, podremos querer cachear la página «Home» o el «Top 10» de un sitio usando el provider de ASP.NET ( que será muy rápido ya que el contenido se guarda en memoria), y quitar de caché las páginas que menos se piden.

Podemos indicar dinámicamente qué provider de cache usar en una petición sobreescribiendo el método GetOutputCacheProviderName() del Global.asax de una aplicación. En la imagen siguiente estoy indicando que para la página «Home.aspx» quiero usar el provider de cache de ASP.NET, y en cualquier otro caso usaré el que esté definido en el web.config:

Esta habilidad de cambiar de provider depeniendo de lo que queramos nos permite crear escenarios mucho más potentes.

Providers de cache personalizados.

Publicaremos ejemplso que muestran cómo implementar caches basadas en disko que guardan el contenido cacheado en un sistema de archivos. También publicaremos ejemplos que muestran cómo integrar el sistema de caeche con el nuevo servicio de Windows Server AppFabric Cahcing SErvice (formalmente conocido como «Velocity»). Este servicio será gratuito, y soportado totalemnte, por Microsoft. También será fácil de usar en ASP.NET 4 con memcached – un sistema de cache distribuido open source muy popular.

Podes aprender más sobre cómo crear providers viendo la charla de Stefan Shackows de ASP.NET 4 Core Runtime del PDC 2009

También podeis aprender más del servicio AppFabric en esta charla del PDC 2009 

Resumen

La adición de la característica de extensibilidad del sistema de cache de ASP.NET 4 permite a los desarrolladores crear sistemas de cache más agresivos y más inteligentes en aplicacionesweb. Esto puede mejorar significativamente el resndimiento de aplicaciones, y mejorar también la experiencia de usuarios y reducir la cantidad de recursos de servidor necesarios.

Espero que sirva,

Scott.

Traducido por: Juan María Laó Ramos.

Artículo original.

0 comentarios sobre “Output Caching Extensible con ASP.NET 4”

  1. Tus imágenes no se ven, podrías revisar tu storage es problable que el contenedor de las imagenes sea privado, por eso no las podemos ver, gracias por lo demás, tengo muchas ddas, es la primera vez que implementare una memoria cache 🙁

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *