NOTE: Apart from
(and even then it's questionable, I'm Scottish). These are machine translated in languages I don't read. If they're terrible please contact me.
You can see how this translation was done in this article.
Monday, 12 August 2024
//Less than a minute
Caching es una técnica importante tanto para mejorar la experiencia del usuario cargando contenido más rápido como para reducir la carga en su servidor. En este artículo le mostraré cómo utilizar las características de caché integradas de ASP.NET Core con HTMX para almacenar contenido en caché en el lado del cliente.
En ASP.NET Core, hay dos tipos de Caching ofrecidos
Para configurar estos en ASP.NET Core necesita añadir un par de servicios en suProgram.cs
archivo
builder.Services.AddResponseCaching();
app.UseResponseCaching();
services.AddOutputCache();
app.UseOutputCache();
Si bien es posible configurar la Caché de respuesta en suProgram.cs
a menudo es un poco inflexible (especialmente cuando se utilizan solicitudes HTMX como he descubierto). Puede configurar la Caché de respuesta en las acciones de su controlador mediante el uso de laResponseCache
atributo.
[ResponseCache(Duration = 300, VaryByHeader = "hx-request", VaryByQueryKeys = new[] {"page", "pageSize"}, Location = ResponseCacheLocation.Any)]
Esto ocultará la respuesta durante 300 segundos y variará la caché por elhx-request
encabezado y elpage
ypageSize
parámetros de consulta. También estamos configurando elLocation
aAny
lo que significa que la respuesta se puede guardar en caché en el cliente, en servidores proxy intermediarios, o en ambos.
Aquí lahx-request
encabezado es el encabezado que HTMX envía con cada solicitud. Esto es importante, ya que le permite guardar en caché la respuesta de forma diferente en función de si se trata de una solicitud HTMX o una petición normal.
Esta es nuestra corrienteIndex
método de acción. Yo puede ver que aceptamos un parámetro de tamaño de página y página aquí y hemos añadido estos como variables por las claves de consulta en elResponseCache
Atributo. Significa que las respuestas son 'indexadas' por estas claves y almacenan contenido diferente basado en éstas.
Dentro de la acción que también tenemosif(Request.IsHtmx())
esto se basa en elPaquete HTMX.Nety, esencialmente, comprueba la mismahx-request
cabecera que estamos usando para variar la caché. Aquí devolvemos una vista parcial si la petición es de HTMX.
public async Task<IActionResult> Index(int page = 1,int pageSize = 5)
{
var authenticateResult = GetUserInfo();
var posts =await blogService.GetPosts(page, pageSize);
posts.LinkUrl= Url.Action("Index", "Home");
if (Request.IsHtmx())
{
return PartialView("_BlogSummaryList", posts);
}
var indexPageViewModel = new IndexPageViewModel
{
Posts = posts, Authenticated = authenticateResult.LoggedIn, Name = authenticateResult.Name,
AvatarUrl = authenticateResult.AvatarUrl
};
return View(indexPageViewModel);
}
Caché de salida es el servidor equivalente a Caché de respuesta. Cachea la salida de una acción controladora. En esencia, el servidor web almacena el resultado de una solicitud y la sirve para solicitudes posteriores.
[OutputCache(Duration = 3600,VaryByHeaderNames = new[] {"hx-request"},VaryByQueryKeys = new[] {"page", "pageSize"})]
Aquí estamos cacheando la salida de la acción del controlador durante 3600 segundos y variando la caché por elhx-request
encabezado y elpage
ypageSize
parámetros de consulta.
Como estamos almacenando el lado del servidor de datos durante un tiempo significativo (los mensajes sólo se actualizan con un impulso Docker) esto es más largo que el Caché de Respuesta; en realidad podría ser infinito en nuestro caso, pero 3600 segundos es un buen compromiso.
Al igual que con el Caché Respuesta que estamos utilizando elhx-request
cabecera para variar la caché en función de si la solicitud es de HTMX o no.
ASP.NET Core también tiene soporte integrado para el almacenamiento en caché de archivos estáticos.Cache-Control
cabeza en la respuesta. Puede configurar esto en suProgram.cs
archivo.
Tenga en cuenta que el orden i es importante aquí, si sus archivos estáticos necesitan apoyo de autorización debe mover elUseAuthorization
middleware antes de laUseStaticFiles
middleware. THe UseHttpsRedirection middleware también debe estar antes de que useStaticFiles middleware si confía en esta función.
app.UseHttpsRedirection();
var cacheMaxAgeOneWeek = (60 * 60 * 24 * 7).ToString();
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = ctx =>
{
ctx.Context.Response.Headers.Append(
"Cache-Control", $"public, max-age={cacheMaxAgeOneWeek}");
}
});
app.UseRouting();
app.UseCors("AllowMostlylucid");
app.UseAuthentication();
app.UseAuthorization();
Caching es una poderosa herramienta para mejorar el rendimiento de su aplicación. Al utilizar las funciones de caché integradas de ASP.NET Core, puede fácilmente cachear contenido en el lado del cliente o del servidor. Al utilizar HTMX puede cachear contenido en el lado del cliente y servir vistas parciales para mejorar la experiencia del usuario.