Кэширование в ASP.NET Core. Кэширование статических файлов

Кроме кэширования результатов каких-либо действий нашего приложения также немаловажным элементом практически любого веб-приложения является кэширование статических файлов, например, js-скриптов, картинок/иконок и т.д., то есть таких элементов, которые могут вообще никогда не изменяться или изменяться крайне редко, но которые могут достаточно часто загружаться вместе со страницами веб-приложений. Рассмотрим моменты кэширования статических файлов в ASP.NET Core

Пример использования статических файлов в ASP.NET Core

Работу со статическими файлами в ASP.NET Core мы уже рассматривали. Поэтому сразу приведу пример приложения с которым мы будем работать. Это приложение имеет следующую структуру:

В папке wwwroot содержится два файла. CSS-файл имеет следующее содержание:

h1 {
    font-family: 'Arial', 'Verdana', sans-serif;
}

p {
    font-family: 'Arial';
    font-size: 21px;
}

Файл index.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Static File</title>
    <link rel="stylesheet" href="style.css" />
</head>
<body>
    <h1>Пример использования CSS</h1>
    <p>Это простой текст</p>
</body>
</html>

Класс Program приложения:

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);
        var app = builder.Build();
        app.UseDefaultFiles();
        app.UseStaticFiles();
        app.Run();
    }
}

Если запустить приложение, то мы увидим следующий текст и информацию в консоли разработчика в браузере:

Вместе с загрузкой html-страницы также загружается и css-файл. Для нашего приложения — это мелочь, но современные веб-приложения могут подгружать довольно большие css-файлы и файлы со скриптами, что может серьезно повлиять на производительность нашего приложения. Рассмотрим, как мы можем кэшировать статический контент в ASP.NET Core

Кэширование статических файлов в ASP.NET Core

Основной заголовок HTTP, используемый для кэширования — cache-Control, который используется для указания директив кэша. Этот заголовок мы должны установить в настройках компонента middleware, встраиваемого в конвейер обработки запросов методом UseStaticFiles(). Сделать это можно следующим образом:

app.UseStaticFiles(new StaticFileOptions() 
 {
     OnPrepareResponse = opts => 
     {
         opts.Context.Response.Headers.Add("cache-Control", "public,max-age=60");
     }
 });

Свойство OnPrepareResponse у объекта StaticFileOptions — это делегат Action который принимает объект StaticFileResponseContext в качестве параметра. Через этот объект мы можем получить доступ к HttpContext и, следователь, установить заголовки ответа, которые будут отправляться вместе со статическими файлами.

В примере выше мы устанавливаем заголовок «Cache-Control», который задает параметры кэширования, а именно:

  • значение «public» указывает, что файл будет кэшироваться как в кэше браузера, так и на промежуточных прокси-серверах.
  • значение «max-age» указывает время кэширования в секундах.

Посмотрим, как будет работать наше приложение с такими настройками работы со статическими файлами:

первый запуск

Второй и последующие загрузки страницы:

Как можно видеть на втором скриншоте, файл style.css был загружен из кэша и, при этом, на его загрузку вместо 10 мс ушло 0 мс, что говорит о том, что наша настройка кэширования статических файлов в ASP.NET Core работает.

Итого

Для кэширования статических файлов в ASP.NET Core мы должны передать настройки StaticFileOptions в метод UseStaticFiles, определив в настройках делегат, принимающий в качестве параметра объект  StaticFileResponseContextс помощью которого устанавливается заголовок cache-Control. Кэширование статических файлов может значительно повысить производительность вашего веб-приложения в случае, если используется большое количество статических файлов.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии