Вспомогательная функция тегов кэша в MVC-моделях ASP.NET Core
Автор: Питер Кельнер (Peter Kellner)
Вспомогательная функция тегов кэша позволяет повысить производительность приложения ASP.NET Core за счет кэширования его содержимого во внутренний поставщик кэша ASP.NET Core.
Общие сведения о вспомогательных функциях тегов см. в разделе Вспомогательные функции тегов в ASP.NET Core.
Razor Следующая разметка кэширует текущую дату:
<cache>@DateTime.Now</cache>
Первый запрос к странице, содержащей вспомогательную функцию тегов, отобразит текущую дату. Последующие запросы будут показывать кэшированное значение, пока срок действия кэша не истечет (по умолчанию — 20 минут) или пока кэшированная дата не будет удалена из кэша.
Атрибуты вспомогательной функции тегов кэша
включена
Тип атрибута | Примеры | По умолчанию |
---|---|---|
Логическое значение | true , false |
true |
enabled
определяет, кэшируется ли содержимое, охватываемое вспомогательной функцией тегов кэша. Значение по умолчанию — true
. Если установлено значение false
, выводимые данные не кэшируются.
Пример:
<cache enabled="true">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
expires-on
Тип атрибута | Пример |
---|---|
DateTimeOffset |
@new DateTime(2025,1,29,17,02,0) |
expires-on
задает абсолютную дату окончания срока действия для элемента кэша.
В следующем примере содержимое вспомогательной функции тегов кэша будет кэшировано до 29 января 2025 г., 17:02:
<cache expires-on="@new DateTime(2025,1,29,17,02,0)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
expires-after
Тип атрибута | Пример | По умолчанию |
---|---|---|
TimeSpan |
@TimeSpan.FromSeconds(120) |
20 минут. |
expires-after
задает интервал времени для кэширования содержимого с момента первого запроса.
Пример:
<cache expires-after="@TimeSpan.FromSeconds(120)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
Модуль Razor представления задает значение по умолчанию expires-after
20 минут.
expires-sliding
Тип атрибута | Пример |
---|---|
TimeSpan |
@TimeSpan.FromSeconds(60) |
Задает время, по истечении которого запись кэша следует удалить, если к ней не было обращений.
Пример:
<cache expires-sliding="@TimeSpan.FromSeconds(60)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-header
Тип атрибута | Примеры |
---|---|
Строка | User-Agent , User-Agent,content-encoding |
vary-by-header
принимает список разделенных запятыми значений заголовков, запускающих обновление кэша при их изменении.
Следующий пример показывает отслеживание значения заголовка User-Agent
. Содержимое будет кэшироваться для каждого отдельного заголовка User-Agent
, представленного на веб-сервере:
<cache vary-by-header="User-Agent">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-query
Тип атрибута | Примеры |
---|---|
Строка | Make , Make,Model |
vary-by-query
принимает список разделенных запятыми Keys в строке запроса (Query), запускающих обновление кэша при изменении значения любого указанного ключа.
Следующий пример показывает отслеживание значений Make
и Model
. Содержимое будет кэшироваться для каждого отдельного заголовка Make
и Model
, представленного на веб-сервере:
<cache vary-by-query="Make,Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-route
Тип атрибута | Примеры |
---|---|
Строка | Make , Make,Model |
vary-by-route
принимает список разделенных запятыми имен параметров маршрута, запускающих обновление кэша при изменении значения параметра данных маршрута.
Пример:
Startup.cs
:
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{Make?}/{Model?}");
Index.cshtml
:
<cache vary-by-route="Make,Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
разными по-cookie
Тип атрибута | Примеры |
---|---|
Строка | .AspNetCore.Identity.Application , .AspNetCore.Identity.Application,HairColor |
vary-by-cookie
принимает список cookie имен с разделителями-запятыми, которые активируют обновление кэша при изменении значений cookie .
В следующем примере отслеживается связанный cookie с ASP.NET Core Identity. При проверке подлинности пользователя изменение Identitycookie в кэше активирует обновление кэша:
<cache vary-by-cookie=".AspNetCore.Identity.Application">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-user
Тип атрибута | Примеры | По умолчанию |
---|---|---|
Логическое значение | true , false |
true |
vary-by-user
указывает, следует ли сбрасывать кэш при изменении вошедшего в систему пользователя (или участника контекста). Текущий пользователь также называется субъектом контекста запроса и может просматриваться в Razor представлении, ссылаясь @User.Identity.Name
.
В следующем примере отслеживается текущий вошедший пользователь для активации обновления кэша:
<cache vary-by-user="true">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
При использовании этого атрибута содержимое сохраняется в кэше в течение цикла входа и выхода. Если присвоено значение true
, цикл проверки подлинности делает недействительным кэш для прошедшего проверку подлинности пользователя. Кэш недопустим, так как при проверке подлинности пользователя создается новое уникальное cookie значение. Кэш сохраняется для анонимного состояния, если срок действия отсутствует cookie или cookie истек. Если пользователь не прошел проверку подлинности, кэш сохраняется.
vary-by
Тип атрибута | Пример |
---|---|
Строка | @Model |
vary-by
позволяет настраивать, какие данные кэшируются. Содержимое вспомогательной функции тегов кэша обновляется при изменении объекта, на который ссылается строковое значение атрибута. Часто этому атрибуту назначается объединенная строка значений модели. По сути, это приводит к ситуации, когда обновление любого из объединенных значений приводит к сбросу кэша.
В следующем примере предполагается, что метод контроллера, визуализирующий представление, суммирует целочисленные значения двух параметров маршрута (myParam1
и myParam2
) и возвращает сумму как одно свойство модели. При изменении этой суммы содержимое вспомогательной функции тегов кэша визуализируется и кэшируется заново.
Действие:
public IActionResult Index(string myParam1, string myParam2, string myParam3)
{
int num1;
int num2;
int.TryParse(myParam1, out num1);
int.TryParse(myParam2, out num2);
return View(viewName, num1 + num2);
}
Index.cshtml
:
<cache vary-by="@Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
priority
Тип атрибута | Примеры | По умолчанию |
---|---|---|
CacheItemPriority |
High , Low , NeverRemove , Normal |
Normal |
priority
предоставляет встроенному поставщику кэша инструкции по удалению кэша. При нехватке памяти веб-сервер будет первыми удалять записи кэша с приоритетом Low
.
Пример:
<cache priority="High">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
Атрибут priority
не гарантирует определенный уровень периода удержания кэша. CacheItemPriority
носит лишь рекомендательный характер. Установка для этого атрибута значения NeverRemove
не гарантирует постоянное хранение элементов кэша. Дополнительные сведения см. в разделе Дополнительные ресурсы.
Вспомогательная функция тегов кэша зависит от службы кэширования в памяти. Вспомогательная функция тегов кэша добавляет эту службу, если она не добавлена.
Дополнительные ресурсы
ASP.NET Core
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по