lunes, 7 de noviembre de 2011

ASP.NET - Almacenamiento en caché (2° parte)


En la entrada anterior estuve escribiendo sobre la cache de aplicaciones (ver entrada anterior). En esta nueva voy a comentar sobre la cache de resultados de páginas.

Cache de resultados de páginas:

Para conocer como funciona el almacenamiento en cache de resultados de páginas veamos que pasa cuando un navegador recupera una página web. Al realizarse esta tarea, se guarda una copia de la página en el equipo local. Al solicitarse la página nuevamente por el usuario simplemente se verifica que la versión guardada en la cache siga siendo válida y luego muestra la página almacenada. Esta acción disminuye el tiempo de carga de la página y reduce cargas innecesarias al servidor.

Ahora, siguiendo con el ejemplo, en el equipo cliente, se genera una página por usuario. Así, si ese usuario visualiza la página 100 veces, la página solo se tiene que generar una vez pero si 100 usuarios visitan una página, el servidor web tendrá que generar esa página 100 veces.

Desde ASP.NET también es posible utilizar la cache de resultados de páginas guardando una copia de una página web ASP.NET renderizada en la memoria del servidor. La próxima vez que un usuario solicite esta, incluso si se trata de otro usuario, ASP.NET puede devolver la página casi al instante.

Al utilizarse este tipo de almacenamiento en cache del lado del servidor, puede mejorar significativamente el rendimiento y aumentar la escalabilidad. Incluso, ASP.NET brinda muchas opciones de configuración a fin de poder satisfacer casi cualquier necesidad.

Configuración de cache para una página:
Es posible configurar cada página ASP.NET en el sitio para ser cacheadas en forma independiente. A su vez también pueden cachearse los controles contenidos en la página. Para poder realizar esto se deberá agregar la directiva @OutputCache en la parte superior del markup la página.

Esta directiva posee los siguientes atributos:
  • Duration: es el tiempo, expresado en segundos, que la página o el control de usuario permanecen en la memoria cache. Este atributo es el único requerido
  • Location: un valor del enumerado OutputCacheLocation. El valor por defecto es Any. Los valores del enumerado son: Any, Client, Downstream, Server, None y ServerAndClient.
  • CacheProfile: nombre de la configuración de cache que se asocia a la página. El valor por defecto es una cadena vacia (“”).
  • NoStore: valor booleano que determina si se debe evitar el almacenamiento secundario de información confidencial
  • ProviderName: cadena que identifica el proveedor de memoria cache de resultados que se va a utilizar.
  • Shared: valor booleano que determina si se puede compartir el resultado del control de usuario con varias páginas. Por defecto el valor es false.
  • SqlDependency: una cadena que identifica un conjunto de pares de bases de datos y tablas de los que depende la memoria cache de resultados de una página o control.
  • VaryByCustom: texto que representa los requisitos personalizados de almacenamiento en la memoria cache de resultados. Si el valor de este atributo es browser, el almacenamiento en caché varía en función del nombre y número de versión principal del browser. En el caso que se escriba una cadena personalizada, será necesario sobreescribir el método GetVaryByCustomString del archivo Global.asax de la aplicación.
  • VaryByHeader: lista de encabezados HTTP, separados por punto y coma, que se utilizan para modificar la memoria caché de resultados. Cuando este atributo se establece en varios encabezados, la memoria caché de resultados contiene una versión diferente del documento solicitado para cada combinación de encabezados especificados.
  • VaryByParam: lista de cadenas, separadas por punto y coma, que se utilizan para modificar el almacenamiento en la memoria caché de resultados. Por defecto, estas cadenas se corresponden con un valor de cadena de consulta enviado con atributos del método GET o con un parámetro enviado mediante el método POST.Cuando este atributo se establece en varios parámetros, la memoria caché de resultados contiene una versión diferente del documento solicitado para cada combinación de parámetros especificados.Los valores posibles incluyen none, un asterisco (* y cualquier cadena de consulta o nombre de parámetro POST válido.
  • VaryByControl: lista de cadenas, separadas por punto y coma, que se utilizan para modificar el almacenamiento en la memoria caché de resultados de un control de usuario. Estas cadenas representan los valores de la propiedad ID de los controles de servidor ASP.NET declarados en el control de usuario.
  • VaryByContentEncondings: lista de cadenas, separadas por punto y coma, que se utilizan para modificar la memoria caché de resultados. Este atributo se utiliza con el encabezado Accept-Encoding para determinar cómo se proporcionan las respuestas almacenadas en caché para las diferentes codificaciones de contenido.

Ejemplo de cómo utilizar estos atributos:
<%@ OutputCache Duration="60" VaryByParam="*" %>

En el ejemplo anterior se le asigno una duración de 60 segundos en la memoria  cache de resultados a la página.

Para más información puede visitar la página de Microsoft: http://msdn.microsoft.com/es-es/library/hdxfb6cy.aspx

Páginas parcialmente cacheadas (Partial-Page Caching)

Algunas veces no es muy práctico almacenar en cache páginas ASP.NET enteras dado que no todas las partes de dicha página cambian en cada solicitud. En estos casos es posible almacenar en cache porciones de páginas. Para hacer esto hay dos formas:
  • control caching
  • post-cache substitution
Control caching: utilizado para almacenar en la cache de resultados partes de una página por medio de la creación de controles de usuario para guardar el contenido a cachear y luego hacer este control de usuario cacheable. Esto permite que cierto contenido sea cacheado en la página mientras que el resto se vuelve a crear cada vez.

Post-cache substitution: es el opuesto a control caching. La página es almacenada en la cache y ciertos fragmentos de esta que son dinámicos es posible marcarlos para no ser cacheados.

No hay comentarios:

Publicar un comentario