Aumenta el rendimiento de tus aplicaciones ASP.NET con el motor de caché integrado

La forma más fácil y efectiva de aumentar el rendimiento de las aplicaciones ASP.NET es a través del uso del motor de caché integrado. Aunque es posible crear tu propia caché (como se discute en "Caché con .NET: cuándo comprar, cuándo crear"), es probable que encuentres que el motor de caché tiene tanta funcionalidad incorporada que no necesitas molestarte. En su mayoría, los desarrolladores de ASP.NET envuelven la funcionalidad del motor de caché directamente en las clases de presentación y acceso a datos en las aplicaciones web, y como verás, es muy fácil hacerlo.

Índice de Contenido
  1. Caché de salida de páginas
    1. Tabla A: Atributos de OutputCache
  2. Caché basada en información personalizada
  3. Caché basada en información de cabecera
  4. Caché de fragmentos de página
  5. Mantén tus datos en la caché con la caché de datos

Caché de salida de páginas

La caché de salida de páginas es el tipo de caché más sencillo y se realiza declarativamente añadiendo una única directiva a la página en cuestión, OutputCache. La caché de salida de páginas te permite evitar eficazmente el reprocesamiento de los eventos Init, Load, PreRender, Render y Unload de una página. Si esos eventos acceden a sistemas de respaldo como bases de datos, los ahorros de tiempo son aún más dramáticos. ASP.NET puede almacenar en caché varias variantes de una página y asociar cada página con solicitudes posteriores. Todo esto se controla a través de la directiva OutputCache, que se coloca en la parte superior de una página ASPX y tiene el siguiente formato:

<%@ OutputCache
Duration="duración en segundos"
Location="Cualquiera | Cliente | Aguas abajo | Servidor | Ninguno"
VaryByCustom="navegador | cadena personalizada"
VaryByHeader="cabeceras"
VaryByParam="nombre del parámetro" %>

La directiva OutputCache puede tener hasta cinco atributos asociados que controlan el comportamiento de la caché. Los atributos posibles y sus significados se resumen en el cuadro A.

Tabla A: Atributos de OutputCache

AtributoDescripción
DuraciónEspecifica el tiempo (en segundos) que se almacenará en caché la página. Este atributo es obligatorio y establece una política de expiración para las respuestas HTTP del objeto.
UbicaciónIndica al servidor web y a los dispositivos externos, como servidores proxy y navegadores, que almacenen en caché el contenido de la página. El valor predeterminado es "Cualquiera" y no es obligatorio.
VaryByParamUtiliza una lista de cadenas separadas por punto y coma para variar la caché de salida. De forma predeterminada, estas cadenas corresponden a los valores de la cadena de consulta enviados con atributos del método GET, o a un parámetro enviado mediante el método POST. Cuando este atributo se establece en múltiples parámetros, la caché de salida contiene una versión diferente del documento solicitado para cada parámetro especificado. Los valores posibles incluyen "None", "*", y cualquier nombre válido de cadena de consulta o parámetro POST. Esto es obligatorio si no se establecen otros atributos.
VaryByCustomSe utiliza este atributo para incluir cualquier texto que represente requisitos personalizados de caché de salida. Si el atributo tiene el valor "navegador", la caché variará según el nombre del navegador y su información de versión principal. Si se introduce una cadena personalizada, se debe anular el método GetVaryByCustomString en el archivo Global.asax de la aplicación.
VaryByHeaderEste atributo utiliza una lista de cabeceras HTTP separadas por punto y coma para variar la caché de salida. Cuando el atributo se establece en múltiples cabeceras, la caché de salida contiene una versión diferente del documento solicitado para cada cabecera especificada.

Atributos de OutputCache

La directiva OutputCache puede utilizarse fácilmente para crear una versión única de una página estática en memoria, de la siguiente manera:

<%@ OutputCache
Duration="300"
VaryByParam="None" %>

También puedes almacenar en caché múltiples versiones basadas en el parámetro de cadena de consulta id de esta manera:

<%@ OutputCache
Duration="300"
VaryByParam="id" %>

En ambos casos, la página se eliminará de la caché después de 5 minutos, o 300 segundos, según se especifique en el atributo Duration.

J2ME: La plataforma de desarrollo Java para dispositivos móviles

Caché basada en información personalizada

El atributo VaryByCustom se puede utilizar para crear versiones en caché de una página basadas en información personalizada que proporciones. Por ejemplo, para crear una versión de la página para cada tipo de navegador, puedes utilizar la siguiente directiva:

<%@ OutputCache
Duration="300"
VaryByParam="None"
VaryByCustom="browser" %>

También puedes utilizar VaryByCustom para almacenar en caché páginas basadas en información específica de la aplicación. Por ejemplo, para crear una versión en caché de una página según el nombre del departamento del usuario actual, puedes utilizar la siguiente directiva:

<%@ OutputCache
Duration="300"
VaryByParam="None"
VaryByCustom="department" %>

Luego, en la clase de código detrás del archivo Global.asax, debes anular el método GetVaryByCustomString de la siguiente manera:

Public Overrides Function GetVaryByCustomString(ByVal context As System.Web.HttpContext, ByVal custom As String) As String
  If custom = "department" Then
    ' devuelve el departamento del usuario actual
  
  End If
End Function

El método GetVaryByCustomString recibe el valor personalizado utilizado en la directiva. Cuando se llama a este método por la ejecución de ASP.NET, tu propio algoritmo personalizado puede utilizarse para determinar el departamento del usuario actual según el valor de entrada y devolverlo desde el método.

Caché basada en información de cabecera

El atributo VaryByHeader se puede utilizar para crear múltiples versiones en caché de una página basadas en una o más de las cabeceras HTTP recibidas por la página. Por ejemplo, para crear y almacenar en caché versiones basadas en el idioma del navegador, puedes utilizar la siguiente directiva:

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

Además de almacenar en caché páginas completas de forma declarativa, también puedes establecer opciones de caché de una página de forma programática utilizando la propiedad Cache del objeto Response expuesto por la clase Page. La propiedad Cache expone el objeto HttpCachePolicy para la página y se puede utilizar para establecer la caché durante cinco minutos en el servidor, como se muestra en el siguiente fragmento de código en C#:

Las claves del éxito en la transición de .NET Framework 1.0 a 1.1
private void Page_Init(object sender, System.EventArgs e)
{
  Response.Cache.SetCacheability(HttpCacheability.Server);
  Response.Cache.SetExpires(DateTime.Now.AddSeconds(300));
  Response.Cache.SetValidUntilExpires(true)
}

Caché de fragmentos de página

El uso de la caché de fragmentos de página, que te permite almacenar en caché fragmentos de HTML, es muy eficiente, ya que te permite combinar de forma flexible las partes de una página que cambian con frecuencia con las que no lo hacen, al mismo tiempo que recuperas las partes estáticas de la caché. Un ejemplo práctico sería utilizar la caché de fragmentos para los controles de usuario web que realizan llamadas a servicios web XML. Hacer esto es especialmente eficaz, ya que permite que tu sitio web esté menos acoplado al servicio web y aumente el rendimiento de forma drástica.

Para utilizar la caché de fragmentos, coloca la directiva OutputCache en la parte superior de una página HTML. Esta vez, sin embargo, la colocarás en el archivo .ASCX del control de usuario web. No se admiten los atributos Location y VaryByHeader en la caché de fragmentos, aunque sí se admite el atributo adicional VaryByControl.

Utilizando el atributo VaryByControl, puedes especificar una o varias propiedades del control de usuario en una lista delimitada por punto y coma. Se crearán versiones en caché para cada combinación de valores de propiedad. Por ejemplo, supongamos que tu control de usuario expone una propiedad personalizada State que controla qué elementos del control de usuario se muestran. Puedes almacenar en caché una versión del control renderizado en la caché para cada valor de State utilizando la siguiente directiva:

<%@ OutputCache Duration="300" VaryByControl="State" %>

Sin embargo, al almacenar en caché un control de usuario web, es importante recordar que el tiempo de ejecución de ASP.NET simplemente sustituye el HTML en caché por el control real, evitando cualquier procesamiento de control que normalmente ocurriría. La implicación práctica es que el código que se ejecuta en la página no podrá manipular programáticamente un control de usuario en caché o cualquiera de sus propiedades. En otras palabras, el control de usuario web debe ser completamente autosuficiente y ser capaz de inicializarse a través de sus eventos Load e Init para ser efectivamente almacenado en caché.

La caché de fragmentos también se puede realizar de forma declarativa utilizando un atributo en lugar de la directiva OutputCache. El atributo PartialCaching se puede colocar en una clase derivada de UserControl en el archivo de código detrás para que el tiempo de ejecución de ASP.NET pueda leerlo y almacenar en caché el HTML renderizado en consecuencia. Por ejemplo, la siguiente declaración de la clase de código detrás almacenará en caché el control de usuario web durante cinco minutos según el valor id en la cadena de consulta.

<PartialCaching(300, "id", Nothing, Nothing)> _
Public MustInherit Class MyHeaderControl
Inherits System.Web.UI.UserControl

Mantén tus datos en la caché con la caché de datos

El último tipo de caché admitido por el motor de caché de ASP.NET, la caché de datos, es, por definición, de un nivel inferior que la caché de salida de página o la caché de fragmentos. La caché de datos es útil en escenarios donde se necesitarán los mismos datos, por ejemplo, una lista de productos, en varias páginas diferentes que mostrarán los datos de diferentes formas. Por supuesto, el beneficio de rendimiento de la caché de datos está ligado a la reducción del número de llamadas necesarias a la base de datos de respaldo.

Reseña del libro Sun Certified Enterprise Architect for J2EE Study Guide para la certificación SCEA

Para agregar un elemento a la caché, puedes utilizar la propiedad Cache de la clase Page o UserControl, ya que ambas clases derivan en última instancia de la clase Control. La propiedad Cache expone el objeto System.Web.Caching.Cache, que te permite almacenar datos como combinaciones de claves y valores. Al utilizar esta propiedad, un desarrollador puede escribir código para poblar un elemento y colocarlo en la caché o simplemente extraerlo de la caché si ya existe, como se muestra aquí en C#:

DataTable dt = null;
if (this.Cache["Products"] == null)
{
  // Obtener los datos de la base de datos
  this.Cache.Insert("Products", dt, null,
    DateTime.Now.AddHours(6), TimeSpan.Zero);
}
else
{
  dt = this.Cache["Products"] as DataTable;
}

En el ejemplo anterior, primero se comprueba si el elemento con la clave "Productos" está en la caché. Si no está, se recupera un objeto ADO.NET DataTable de la base de datos de respaldo y se coloca en la caché utilizando el método Insert. En este caso, se utiliza la sobrecarga de Insert que permite especificar una expiración absoluta para el objeto en caché de seis horas sin un intervalo de expiración deslizante. Si, por otro lado, se encuentra el elemento en la caché, simplemente se extrae y se vuelve a convertir en un DataTable utilizando la expresión as.

Cabe señalar que al almacenar en caché datos recuperados mediante ADO.NET, debes almacenar en caché objetos DataTable como se muestra aquí o conjuntos de datos completos, porque ambos objetos están completamente desconectados de cualquier fuente de datos y no mantienen conexiones con la base de datos. No tiene mucho sentido almacenar en caché lectores de datos, como SqlDataReader, porque solo se utilizarán una vez (son lectores de una sola pasada) y mantendrán una conexión a la base de datos durante todo el tiempo que estén abiertos.

La flexibilidad y las características del motor de caché de ASP.NET lo convierten en una de las características más importantes para crear aplicaciones ASP.NET de alta calidad. Utilizando la información básica cubierta en este artículo, deberías poder empezar a utilizar el motor de caché en tus aplicaciones con facilidad.

Elementos de un diagrama de clases en UML y su traducción a Java

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Aumenta el rendimiento de tus aplicaciones ASP.NET con el motor de caché integrado , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.