Tutorial: Usar el almacenamiento en la caché de resultados para mejorar el rendimiento de los sitios Web

Actualización: noviembre 2007

El rendimiento es un aspecto crítico de cualquier aplicación Web. La reducción del volumen de procesamiento que debe realizar un servidor Web para atender las solicitudes individuales se traduce en tiempos de respuesta más rápidos, la capacidad del servidor de administrar más solicitudes simultáneamente y la reducción de la carga en sistemas de datos intermedios y de fondo.

Una forma de conseguir un mejor rendimiento con ASP.NET consiste en utilizar almacenamiento en caché de resultados para reducir la carga de trabajo del servidor. El almacenamiento en caché de resultados es una optimización que reduce el tiempo de respuesta del servidor Web.

Normalmente, cuando un explorador solicita una página ASP.NET, ASP.NET crea una instancia de la página, ejecuta el código de la página, ejecuta las consultas de base de datos (si las hay), ensambla la página dinámicamente y después envía el resultado al explorador. El almacenamiento en caché de resultados permite a ASP.NET enviar una copia preprocesada de una página en lugar de pasar por este proceso para cada solicitud. Esta diferencia reduce el volumen de procesamiento del servidor Web, lo que aumenta el rendimiento y la posibilidad de una escalabilidad mayor.

Las tareas ilustradas en este tutorial incluyen:

  • El almacenamiento de páginas en memoria caché, mediante una directiva de páginas con la que se almacenen en caché todos los resultados de la página, independientemente del tipo de explorador, de los parámetros individuales, o de datos.

  • Con perfiles de caché en el nivel de la aplicación, una característica que permite definir una configuración de almacenamiento en caché de resultados para toda una aplicación. Las páginas individuales se pueden asociar a perfiles que se encuentren en el archivo Web.config. Esto le permite controlar de forma centralizada el almacenamiento en caché en lugar de editar cada página.

  • Almacenamiento en memoria caché basado en parámetros individuales enviados con la página.

Requisitos previos

Para poder completar este tutorial, necesitará:

  • Visual Web Developer (Visual Studio).

  • Microsoft .NET Framework versión 2.0.

Crear el sitio Web

Si ya ha creado un sitio Web en Visual Web Developer (vea Tutorial: Crear una página Web básica en Visual Web Developer), puede utilizar ese sitio Web e ir a la sección siguiente de este tutorial. De lo contrario, cree un sitio Web y una página nuevos siguiendo estos pasos.

Para crear un sitio Web del sistema de archivos

  1. Abra Visual Web Developer.

  2. En el menú Archivo, haga clic en Nuevo sitio Web. (En Visual Web Developer Express Edition, en el menú Archivo, haga clic en Nuevo y, a continuación, haga clic en Sitio Web).

    Aparece el cuadro de diálogo Nuevo sitio Web.

  3. En Plantillas instaladas de Visual Studio, seleccione Sitio Web de ASP.NET.

  4. En el cuadro Ubicación, especifique el nombre de la carpeta en la que desea conservar las páginas de su sitio Web.

    Por ejemplo, escriba el nombre de carpeta C:\WebSites.

  5. En la lista Lenguaje, seleccione el lenguaje de programación con el que prefiera trabajar.

  6. Haga clic en Aceptar.

  7. Visual Web Developer crea la carpeta y una nueva página denominada Default.aspx.

Configurar almacenamiento en caché en el nivel de página

Este procedimiento presenta el almacenamiento básico de páginas en caché. En este procedimiento agregará un control Label a la página con el que se muestra la hora a la que se creó la página y después configurará la página que se debe almacenar en caché. Al mostrar la hora de creación de la página puede ver que la solicitud de la página se atiende desde la caché.

Para configurar almacenamiento en caché en el nivel de las páginas

  1. Abra o cambie a la página Default.aspx. (También puede utilizar cualquier otra página del sitio Web).

  2. Cambie a la vista Diseño.

  3. Desde el grupo Estándar del cuadro de herramientas, arrastre un control Label hasta la página y deje el nombre predeterminado Label1.

  4. Haga doble clic en una zona en blanco de la página.

    El diseñador cambia al editor de código y crea un método Page_Load.

  5. Agregue el siguiente código resaltado al método:

    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs)
         Label1.Text = System.DateTime.Now.ToString()
    End Sub
    
    protected void Page_Load(Object sender, System.EventArgs e)
    {
         Label1.Text = System.DateTime.Now.ToString();
    }
    
  6. Presione CTRL+F5 para ejecutar la página.

    Cuando aparece la página en el explorador, verá la fecha y hora actuales. Presione el botón de actualización del explorador y observe que la marca de hora cambia cada vez.

  7. Cierre el explorador.

  8. Agregue la siguiente directiva @ OutputCache a la parte superior de la página:

    <%@ OutputCache Duration="15" VaryByParam="none" %>
    

    Esta directiva configura la página que se va a almacenar en memoria caché. El atributo Duration especifica que la página permanecerá en la caché durante 15 segundos.

  9. Presione CTRL+F5 para ejecutar la página de nuevo.

  10. Actualice la página varias veces.

    Observe que la presentación de la hora se actualiza sólo cada 15 segundos, independientemente de cuántas veces actualice el explorador. Esto es debido a que la solicitud se atiende desde la caché hasta que transcurre el tiempo especificado, momento en el que se vuelve a ejecutar el código de la página.

Establecer almacenamiento en caché en el nivel de aplicación

En el procedimiento anterior configuró almacenamiento en caché para una página. En algunas circunstancias, quizá desee configurar el almacenamiento en caché para todas las páginas del sitio Web. También podría interesarle establecer distintas reglas (o perfiles) de almacenamiento en caché y aplicar los perfiles de caché a conjuntos de páginas individuales. Si establece almacenamiento en caché en el nivel de la aplicación, podrá cambiar el comportamiento de la caché desde un solo archivo de configuración, en lugar de tener que editar la directiva @ OutputCache de páginas individuales. En el procedimiento siguiente, configurará un perfil de caché simple y lo utilizará para la página con la que estaba trabajando.

Para configurar el almacenamiento en caché en el nivel de aplicación

  1. Si ya tiene un archivo Web.config, vaya al paso 4.

  2. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nombre del sitio Web y, a continuación, haga clic en Agregar nuevo elemento.

  3. En el cuadro de diálogo Agregar elemento, haga clic en Archivo de configuración Web y, a continuación, haga clic en Agregar.

    Asegúrese de utilizar el nombre Web.config.

  4. Agregue el XML siguiente como elemento secundario del elemento system.web:

    <!-- caching section group -->
    <caching>
    <outputCacheSettings>
        <outputCacheProfiles>
            <add name="AppCache1" enabled="true" duration="60"/>
        </outputCacheProfiles>
    </outputCacheSettings>
    </caching>
    
  5. Guarde el archivo y ciérrelo.

  6. Abra o cambie a la página Web con la que estaba trabajando y, a continuación, cambie a la vista Código fuente.

  7. Cambie la directiva @ OutputCache para que se muestre tal como se indica a continuación:

    <%@ OutputCache CacheProfile="AppCache1" VaryByParam="none" %>
    
  8. Presione CTRL+F5 para ejecutar la página.

  9. Actualice la página varias veces.

    Esta vez, la fecha se mantendrá durante el tiempo especificado en el perfil de caché, que es de 60 segundos.

Almacenar en memoria caché con parámetros

La directiva @ OutputCache le exige que establezca el atributo VaryByParam, que hasta ahora ha establecido como "ninguno". El atributo VaryByParam le permite configurar el almacenamiento en caché de manera que ASP.NET almacene distintas versiones de una página según parámetros tales como las cadenas de consulta, los valores de formulario recibido, los encabezados de solicitudes, etc.

Por ejemplo,puede utilizar parámetros de caché en una página en la que se muestren las condiciones meteorológicas de varias ciudades seleccionadas y en que los datos meteorológicos se actualicen sólo cada tres horas. En este escenario, desea almacenar en memoria caché una versión independiente de la página para cada ciudad. Puede hacerlo si establece que el parámetro de caché varíe mediante un parámetro de cadena de consulta.

En el siguiente procedimiento cambiará el control Label que agregó a la página, de manera que se muestre la hora con un fondo coloreado. Puede cambiar el color con un control TextBox que le permita escribir un nombre de color.

Cuando envía la página, el color que escribe se envía como datos de envío y se cambia el color que hay tras el control Label. Cuando se solicita un color nuevo (cuando la página incluye nuevos datos de envío), se vuelve a generar la página y se actualiza la marca de hora. Sin embargo, las siguientes solicitudes del mismo color provocarán que se devuelva la página almacenada en caché (hasta que se haya superado el intervalo de duración).

Para almacenar en caché a partir de parámetros

  1. Abra o cambie a la página en la que ha estado trabajando.

  2. Cambie a la vista Diseño.

  3. Desde el grupo Estándar del cuadro de herramientas, arrastre un control TextBox a la página y establezca su id. como Color.

  4. Arrastre un control Button a la página y deje el nombre predeterminado Button1.

  5. Establezca la propiedad Text del control Button como "Cambiar color".

    Haga doble clic en el control Button para crear un controlador de eventos Click.

  6. Dentro del método, agregue el código resaltado que se muestra a continuación:

    Protected Sub Button1_Click(ByVal sender As Object, _ 
            ByVal e As System.EventArgs) Handles Button1.Click
        Label1.BackColor = _        System.Drawing.Color.FromName(Server.HtmlEncode(Color.Text))
    End Sub
    
    protected void Button1_Click(Object sender, System.EventArgs e)
    {
        Label1.BackColor =         System.Drawing.Color.FromName(Server.HtmlEncode(Color.Text));
    }
    
  7. Establezca el atributo defaultbutton del elemento form en "Button1".

    De este modo, se invoca el controlador de eventos Click del botón cuando se presiona la tecla ENTRAR.

  8. Reemplace la directiva @ OutputCache con la versión siguiente:

    <%@ OutputCache Location="Server" Duration="60" VaryByParam="Color" %>
    
  9. Presione CTRL+F5 para ejecutar la página.

  10. Escriba en el cuadro de texto un nombre de color, como "rojo" o "azul", y haga clic en Cambiar color.

    ASP.NET almacena en caché una versión de la página que utiliza el color especificado.

  11. Actualice la página varias veces.

    Si no escribe un nuevo nombre de color, la fecha y la hora no cambiarán durante un minuto, como mínimo, según especifica el atributo Duration de la directiva @ OutputCache.

  12. Escriba un nuevo color, como "verde" u "orquídea" y, a continuación, envíe la página.

    En esta ocasión verá la actualización de la hora junto con el nuevo color.

Pasos siguientes

En este tutorial se han tratado conceptos básicos acerca del almacenamiento en caché de páginas ASP.NET. Quizá también le interese explorar estas técnicas de almacenamiento en caché adicionales:

  • En lugar de utilizar declaraciones de página, especifique el almacenamiento en caché mediante programación. Por ejemplo, en el método Page_Load podría obtener acceso a la clase HttpCachePolicy (a través de Page.Response.Cache) y establecer los valores y el comportamiento en consecuencia.

  • Almacene en caché las páginas enlazadas a datos para que sólo se vuelvan a generar cuando cambien los datos de los que dependen. Para obtener información detallada, vea Tutorial: Utilizar el almacenamiento en la caché de resultados de ASP.NET con SQL Server.

Vea también

Tareas

Tutorial: Utilizar el almacenamiento en la caché de resultados de ASP.NET con SQL Server

Conceptos

Información general sobre el almacenamiento en caché en ASP.NET

Referencia

@ OutputCache

HttpCachePolicy

VaryByParams