La directiva @OutputCache

 

Un problema muy común cuando desarrollamos una aplicación Web es el boton Atras o la tecla Backspace ya que generalmente lo que hacen es traer la página que quedó en la caché del cliente en lugar de traerla del servidor, un problema muy típico que a muchos les ha sucedido.

Una aplicación común es cuando se define un boton para logout y en el se codifica algunas sentencias de limpieza de sesiones tal como:

 

Session.Abandon();

 

En .NET existen algunas sentencias que nos van a evitar que se traiga las páginas de caché y en vez de ello las vuelven a traer desde el servidor, refrescando las variables y sessiones. Entre ellas tenemos:

 

HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddYears(-10));

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);

HttpContext.Current.Response.Cache.SetNoStore();

 

ASP.NET proporciona métodos más sencillos para controlar el caché. Puede utilizar el directivo @ OutputCache para controlar resultado de página de caché en ASP.NET. Utilice la clase HttpCachePolicy para almacenar objetos arbitrarios tales como conjuntos de datos a memoria de servidor. Puede almacenar el caché en aplicaciones como el explorador de cliente, el servidor proxy y Microsoft Internet Information Services (IIS). Utilizando el Encabezado HTTP Cache-Control, puede controlar el caché.

 

Página ASP.NET de caché

Puede utilizar el directivo @ OutputCache para caché o almacenar en caché mediante código mediante programación utilizando Visual Basic .NET o Visual C # .NET. La directiva @ OutputCache contiene un atributo Location. Este atributo determina la ubicación para elemento almacenado en caché. Puede especificar las siguientes ubicaciones

  1.  

Cualquiera Esto almacena el caché de resultados en el explorador del cliente en el servidor proxy (o cualquier otro servidor) que participa en la solicitud o en el servidor en el que se procesa la solicitud. De forma predeterminada, Cualquiera está seleccionado.

  1.  

Cliente Esto almacena caché de resultados en el explorador del cliente.

  1.  

</UITERM> Indirecto- Esto almacena el caché de resultados en cualquier dispositivo cache-capable (del servidor de origen) que participe en la solicitud.

  1.  

Servidor Esto almacena el caché de resultados en el servidor Web.

  1.  

Ninguno estos turnos lejos del caché de resultados.

 

La directiva @ OutputCache es para controlar el almacenamiento en caché de resultados de páginas en ASP.NET con Visual C# .NET. Puede usar esta técnica para almacenar en caché las páginas del sitio a las que se tenga acceso con más frecuencia, lo que puede aumentar sustancialmente el rendimiento del servidor Web. El rendimiento suele medirse en solicitudes por segundo. Aunque en el ejemplo de código de este artículo se demuestra cómo usar los atributos Duration y VaryByParam, el artículo también incluye una breve descripción de otros enfoques que puede usar con la directiva @ OutputCache

 

Introducción a la directiva @ OutputCache

 

Para utilizar la directiva @ OutputCache para controlar el almacenamiento en caché de resultados de páginas, simplemente hay que agregar la directiva a la parte superior de la página. El método Page.InitOutputCache traduce la directiva en los métodos de la clase HttpCachePolicy.

 

La directiva @ OutputCache incluye los siguientes atributos y opciones:

  1.  

Duration: este atributo especifica cuánto tiempo se almacena un elemento en la caché. El valor de Duration se muestra en segundos.

  1.  

VaryByParam: este atributo determina las entradas de la caché con los parámetros Get o Post. Por ejemplo, si una variable QueryString denominada testVal se establece para el atributo VaryByParam, cada solicitud de página que contenga un valor diferente para testVal se almacena en caché en una página diferente. En el código siguiente se ilustra la sintaxis del atributo VaryByParam:

<%@ OutputCache Duration="Seconds" VaryByParam="testVal"%>
                                                

NOTA: puede especificar un asterisco (*) de modo que se almacenen en caché las diferentes versiones del elemento. Además, puede especificar "none" si sólo existe una versión de un elemento en la caché.

  1.  

Location: este atributo determina dónde se debe almacenar en caché el elemento. Puede especificar las ubicaciones siguientes:

  1.  

Any

  1.  

Client

  1.  

Downstream

  1.  

Server

  1.  

None

En el código siguiente se ilustra la sintaxis del atributo Location:

<%@ OutputCache Duration="Seconds" Location="Client" %>
                                        

  1.  

VaryByCustom: este atributo contiene el valor predeterminado Browser, que significa que se almacena en caché una instancia diferente de un elemento para cada versión del explorador que la solicite. Por ejemplo, tanto Microsoft Internet Explorer 5 como Internet Explorer 5.5 solicitan el elemento. Cuando VaryByCustom se establece en Browser, existe una entrada de la caché para cada versión del explorador. No puede proporcionar una cadena para controlar el almacenamiento en caché de otros escenarios personalizados. La cadena no tiene ningún significado a menos que proporcione código para invalidar el método HttpApplication.GetVaryByCustomString en el archivo Global.asax.

 

En el código siguiente se ilustra la sintaxis del atributo VaryByCustom:

<%@ OutputCache Duration="Seconds" VaryByCustom="string" %>
                                        

  1.  

VaryByHeader: este atributo permite especificar un valor de encabezado HTTP concreto como criterio para determinar diferentes entradas de la caché. En el código siguiente se ilustra la sintaxis del atributo VaryByHeader:

<%@ OutputCache Duration="60" VaryByHeader="Accept-Language" %>
                                        

Cuando use VaryByParam, tenga en cuenta que los cambios de la variable QueryString provocan entradas adicionales en la caché.

 

Tenga presente que Duration se especifica en segundos.

 

Cuando usa VaryByCustom y reemplaza el método HttpApplication.GetVaryByCustomString en el archivo Global.asax, se utiliza la configuración predeterminada de Browser si no se encuentra ninguna correspondencia para la cadena personalizada que se proporciona con el atributo.

About justindeveloper

I am MCP (Microsoft Certified Professional). MCTS (Microsoft Certified Technology Specialist) and MCPD (Microsoft Certified Professional Developer), also I am SAP Business One Certified!! Desarrollando desde el IDE de Visual Studio NET 2003 hasta ahora con el Visual Studio NET 2010. Desde Microsoft SQL Server 2000 hasta ahora con el Microsoft SQL Server 2008 R2 y tambien con SharePoint, desde WSS 3.0 y MOSS 2007 y ahora familirizandome con el Sharepoint Foundation 2010 & Sharepoint Server 2010. The software development will follow being every time more wonderful!
This entry was posted in Development. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s