Статьи

ASP.NET Caching — Повышение производительности — Выходной кэш

Что такое механизм кэширования ASP.NET? Когда использовать кеширование? и как я могу использовать его для повышения производительности моего сайта? вопросы, на которые собирается ответить эта серия статей В сегодняшнем посте я представлю кеш вывода. Вы можете прочитать предыдущие посты в теме:


Что такое кэш вывода
?

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

Сконфигурировав выходной кэш для отдельной страницы декларативным способом, вы можете управлять поведением выходного кэша декларативным способом с помощью директивы страницы @OutputCache. Единственный обязательный параметр для выходного кэша — это Duration, все остальные параметры могут быть использованы, если вы хотите. Давайте опишем некоторые параметры:

  • Длительность — продолжительность в секундах для кэширования веб-страницы.
  • Местоположение — место для сохранения кэшированного объекта. Вы можете сохранить кэшированный объект на сервере, клиенте, обоих или всех других опциях в перечислении OutputCacheLocation.
  • VaryBy * (где * находится в наборе [Param / Header / Custom / Control]) — Наиболее полезные параметры в списке параметров — это параметры VaryBy. С помощью этих параметров вы указываете разделенный точкой с запятой список строк для изменения выходного кэша. Эти строки могут быть параметрами, если строка запроса (Param), значения свойств идентификатора сервера ASP.NET контролируют то, что было объявлено в пользовательском контроле (Control) и т. Д. Поэтому эти параметры используются для изменения кэширования страницы / элемента управления указанными параметрами, поэтому включение кэширования одной и той же страницы / элемента управления с различным поведением.
  • SqlDependency — строковое значение, которое идентифицирует набор пар базы данных и имен таблиц, от которых зависит выходной кэш страницы или элемента управления. Каждое обновление элементов в таблице приведет к удалению элементов из кэша при использовании опроса на основе таблицы.

Давайте посмотрим на пример декларативного способа:

<%@ OutputCache Duration="30" Location="Client" VaryByParam="PageNumber;Count" %>

В этом примере выходной кэш будет длиться 30 секунд, будет сохранен на стороне клиента и будет изменять параметры строки запроса PageNumber и Count.

Настройте кэш вывода для одной страницы во время выполнения

Мы можем использовать декларативный способ, но иногда мы хотим использовать кэширование во время выполнения. Кэш вывода можно настроить во время выполнения с помощью свойства Response.Cache. В программном плане методов мало, чем декларативным. Доступные методы:

  • SetExpires — указывает количество секунд, в течение которых страница будет кэшироваться.
  • SetCacheability — использует перечисление, чтобы указать, где будет храниться кеш .
  • SetValidUntilExpires — если метод принимает значение true в качестве параметра, кэш игнорирует
    заголовки аннулирования.


Отказ от кэширования страниц

Есть много причин, чтобы сделать недействительной кэшированную страницу, например, элементы, которые были вставлены или обновлены в базе данных, изменения файла, которые использует страница, и т. Д. Когда нам нужно сделать недействительной кэшированную страницу, есть несколько способов сделать это. Давайте рассмотрим пути:

Определите, следует ли использовать кэшированную страницу — чтобы определить, следует ли использовать кэшированную страницу, необходимо ответить на событие ValidateCacheOutput. Примером того, как это сделать, может быть:

protected void ValidateCacheOutput(HttpContext context, object data, ref HttpValidationStatus status)
{
string pageNumber = context.Request.QueryString["PageNumber"];

if (string.IsNullOrEmpty(pageNumber))
{
status = HttpValidationStatus.Valid;
}

else
{
status = HttpValidationStatus.Invalid;
}
}



protected void Page_Load(object sender, EventArgs e)
{

Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(ValidateCacheOutput), null);
}

В этом примере вы видите использование AddValidationCallback, который является частью объекта Cache ответа. ASP.NET использует этот метод обратного вызова, чтобы определить, использовать кэшированную версию страницы или нет в соответствии с перечислением HttpValidationStatus. В приведенном мной примере, если в строке запроса нет pageNumber, кеш действителен, иначе кеш недействителен. Этот пример очень прост, и я не буду рекомендовать его использовать, но он показывает концепцию использования обратного вызова ValidatecacheOutput. Обратите внимание, чтобы зарегистрировать AddValidationCallback в событии Page_Load, а не после него.

Создать выходную зависимость для кэша — в Response есть методы, которые помогают создать выходную зависимость страницы кэша. Этими методами являются AddCacheDependency, AddCacheItemDependency, AddCacheItemDependencies, AddFileDependency и AddFileDependencies. 

Настройка кэширования в файле веб-конфигурации

В предыдущем разделе я описал, как использовать кэш вывода программно, но иногда вы хотите использовать конфигурации. В файле конфигурации мы создаем профили кэша, которые страницы приложения могут использовать с директивой страницы @OutputCache. Это можно сделать с помощью элемента кэширования в элементе system.web файла web.config. В элементе кэширования мы добавляем профили кэша, которые можно легко использовать в приложении. Следующий пример показывает, как построить профиль кеша:

<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="profile" duration="30" enabled="true" varyByParam="pageNumber"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>

Мы используем такой профиль на странице:

<%@ OutputCache Duration="30" CacheProfile="profile" %>

Другие вещи, которые вы можете настроить: sqlCacheDependency, outputCache для всего приложения и политика кэширования для всего приложения.

Резюме

Подведем итоги поста. В посте я показал способы использования кэша вывода, который является очень мощным инструментом для повышения производительности. Как вы могли заметить в посте, существует множество способов использовать кэш вывода либо программно, либо декларативно. Использовать выходной кеш легко, но вы должны использовать его очень осторожно. Пользователи приложения не будут жалеть, если страницы веб-приложения станут статичными, потому что вы плохо использовали кэш вывода. Я предлагаю изучить кэш вывода и его последствия очень хорошо, прежде чем его использовать. Это последний пост из серии о том, как использовать кэширование ASP.NET.