Almacenamiento en caché de datos en un sitio de ASP.NET Web Pages (Razor) para mejorar el rendimiento
Por Tom FitzMacken
En este artículo se explica cómo usar un asistente para almacenar en caché información para un rendimiento más rápido en un sitio web de ASP.NET Web Pages (Razor). Puede acelerar su sitio web si lo almacena, es decir, la memoria caché, los resultados de los datos que normalmente tardarían un tiempo considerable en recuperar o procesar un...
Aprenderá lo siguiente:
- Cómo usar el almacenamiento en caché para mejorar la capacidad de respuesta de su sitio web.
Estas son las características de ASP.NET presentadas en el artículo:
- El asistente
WebCache
.Versiones de software usadas en el tutorial
- ASP.NET Web Pages (Razor) 3
Este tutorial también funciona con ASP.NET Web Pages 2.
Cada vez que alguien solicita una página de su sitio, el servidor web tiene que realizar algún trabajo para completar la solicitud. En algunas de las páginas, es posible que el servidor tenga que realizar tareas que tarden mucho (comparativamente) mucho tiempo, como recuperar datos de una base de datos. Incluso si estas tareas no tardan mucho tiempo en términos absolutos, si el sitio experimenta mucho tráfico, una serie completa de solicitudes individuales que hacen que el servidor web realice la tarea complicada o lenta puede agregar mucho trabajo. Esto puede afectar en última instancia al rendimiento del sitio.
Una manera de mejorar el rendimiento de su sitio web en circunstancias como esta es almacenar en caché los datos. Si el sitio recibe solicitudes repetidas para la misma información, y la información no necesita modificarse para cada persona, y no es sensible a la hora, en lugar de volver a capturarla o recalcularla, puede capturar los datos una vez y, a continuación, almacenar los resultados. La próxima vez que una solicitud entre en esa información, solo tiene que sacarla de la memoria caché.
En general, se almacena en caché la información que no cambia con frecuencia. Cuando se coloca información en la memoria caché, se almacena en memoria en el servidor web. Puede especificar cuánto tiempo se debe almacenar en caché, de segundos a días. Cuando expira el período de almacenamiento en caché, la información se quita automáticamente de la memoria caché.
Nota:
Es posible que las entradas de la memoria caché se quiten por motivos distintos de los que han expirado. Por ejemplo, el servidor web podría ejecutar temporalmente poco memoria y una manera de reclamar memoria es iniciando entradas fuera de la memoria caché. Como verá, incluso si ha colocado información en la memoria caché, debe comprobar que todavía está allí cuando lo necesite.
Imagine que su sitio web tiene una página que muestra la temperatura actual y la previsión meteorológica. Para obtener este tipo de información, puede enviar una solicitud a un servicio externo. Dado que esta información no cambia mucho (en un período de dos horas, por ejemplo) y, dado que las llamadas externas requieren tiempo y ancho de banda, es un buen candidato para el almacenamiento en caché.
Agregar almacenamiento en caché a una página
ASP.NET incluye un WebCache
asistente que facilita la adición de almacenamiento en caché al sitio y la adición de datos a la memoria caché. En este procedimiento, creará una página que almacena en caché la hora actual. Este no es un ejemplo real, ya que la hora actual es algo que cambia a menudo y que, por otra parte, no es complejo calcular. Sin embargo, es una buena manera de ilustrar el almacenamiento en caché en acción.
Agregue una nueva página denominada WebCache.cshtml al sitio web.
Agregue el marcado siguiente al final de la página:
@{ var cacheItemKey = "CachedTime"; var cacheHit = true; var time = WebCache.Get(cacheItemKey); if (time == null) { cacheHit = false; } if (cacheHit == false) { time = @DateTime.Now; WebCache.Set(cacheItemKey, time, 1, false); } } <!DOCTYPE html> <html> <head> <title>WebCache Helper Sample</title> </head> <body> <div> @if (cacheHit) { @:Found the time data in the cache. } else { @:Did not find the time data in the cache. } </div> <div> This page was cached at @time. </div> </body> </html>
Al almacenar en caché los datos, se coloca en la memoria caché con un nombre que es único en todo el sitio web. En este caso, usará una entrada de caché denominada
CachedTime
. Este es elcacheItemKey
que se muestra en el ejemplo de código.El código lee primero la entrada de
CachedTime
caché. Si se devuelve un valor (es decir, si la entrada de caché no es null), el código simplemente establece el valor de la variable de hora en los datos de caché.Sin embargo, si la entrada de caché no existe (es decir, es null), el código establece el valor de hora, lo agrega a la memoria caché y establece un valor de expiración en un minuto. Después de un minuto, se descarta la entrada de caché. (El valor de expiración predeterminado para un elemento de la memoria caché es de 20 minutos) El comando
WebCache.Set(cacheItemKey, time, 1, false)
muestra cómo agregar el valor de hora actual a la memoria caché y establecer su expiración en 1 minuto. Establecer el parámetro slidingExpiration enfalse
significa que la hora de expiración no se renueva cada vez que se solicita. Expirará exactamente 1 minuto después de que se haya agregado originalmente a la memoria caché. Si establece este valor entrue
el tiempo de expiración de 1 minuto se restablece cada vez que se solicita el valor de la memoria caché.Este código muestra el patrón que siempre debe usar al almacenar en caché los datos. Antes de salir de la memoria caché, compruebe siempre si el
WebCache.Get
método ha devuelto null. Recuerde que es posible que la entrada de caché haya expirado o se haya quitado por algún otro motivo, por lo que nunca se garantiza que cualquier entrada determinada esté en la memoria caché.Ejecute WebCache.cshtml en un explorador. (Asegúrese de que la página está seleccionada en el área de trabajo Archivos antes de ejecutarla) La primera vez que solicite la página, los datos de hora no están en la memoria caché y el código tiene que agregar el valor de hora a la memoria caché.
Actualice WebCache.cshtml en el explorador. Esta vez, los datos de hora están en la memoria caché. Observe que la hora no ha cambiado desde la última vez que vio la página.
Espere un minuto para que se vacíe la memoria caché y, a continuación, actualice la página. La página indica de nuevo que los datos de hora no se encontraron en la memoria caché y la hora actualizada se agrega a la memoria caché.