Добавьте версию, указывая на то, что кэшированная старая версия статического файла устарела, чтобы избежать использования

Дата создания страницы :

Так как передняя стадия длинная, если вы хотите увидеть только программу, пожалуйста, пропустите ее.

окружающая среда

Визуальная студия
  • Визуальная студия 2019
ASP.NET ядро
  • 3.1 (Страница бритвы, MVC)

О кэширование файлов на веб-страницах

При посещении веб-страницы, в дополнение к HTML, файлы .js (Javascript), файлы .css (листы стилей) и файлы изображений загружаются клиенту для отображения и выполнения. Тем не менее, некоторые файлы изображений являются большими, и загрузка их каждый раз может быть дорогостоящим. Кроме того.js файлы и .css файлы часто используются на других страницах, и нет необходимости загружать их каждый раз. Эти файлы могут быть временно сохранены в вашем браузере после загрузки. Это называется кэшированием.

Например, если файл кэширован, HTML загружается с веб-сервера при посещении одной и той же страницы. Другие файлы просматриваются и запускаются с использованием локально хранящихся файлов без их загрузки, если есть кэш. Это снижает нагрузку на сервер и позволяет клиенту просматривать страницу на высокой скорости без потребления пропускной способности связи.

Проблемы, вызванные кэшированием

Являются ли файлы, размещенные на сервере, и кэшированные файлы одинаковыми, как правило, зависит от пути файла, описанного в HTML. Тот же путь файла в основном кэшированные файлы. (Могут быть и другие условия, но путь файла не уверен)

Ниже приводится пример пути файла. Применяются параметры атрибута хреф и src.

<!-- スタイルシート (.css) -->
<link rel="stylesheet" href="/css/site.css" />

<!-- 画像ファイル -->
<img src="/image/sample.png" alt="サンプル画像" />

<!-- JavaScript (.js) -->
<script src="/js/site.js"></script>

Тем не менее, такое поведение может быть проблемой.

Например, если у пользователя есть файл JavaScript версии 1, когда он впервые получает к нему доступ, файл JavaScript версии 1 кэширован. Затем сервер публикует файл JavaScript версии 2. Если путь файла JavaScript был таким же, когда пользователь посетил ту же страницу, файл Javascript версии 1, кэшированный без загрузки файла JavaScript версии сервера 2, может быть использован. Это может привести к дефектам, которые общественность не намерена.

В это время, я думаю, что вы часто видите "Попробуйте удалить кэш" в качестве одной из контрмер на стороне пользователя, но это может быть причиной.

Как справиться с проблемами кэша на стороне сервера

Как уже упоминалось выше, используются ли кэшированные файлы, во многом зависит от пути файла (URL).

Поэтому при обновлении файла можно заставить его загрузить новый файл, изменив имя файла.

Например, если файл версии 1

<link rel="stylesheet" href="/css/site.css" />

Когда файл был обновлен версия 2

<link rel="stylesheet" href="/css/site2.css" />

Site2 .css на стороне клиента.

Однако, если вы делаете это вручную, это может быть громоздким и подверженным ошибкам, чтобы изменить пути и переименовать физические файлы.

Добавление параметров запроса в путь файла

Способ работы Web позволяет добавлять параметры запроса с сочетанием ключей и значений после пути. В механизме кэширования клиента, даже если физические файлы одинаковы, если параметры запроса отличаются, они будут распознаться как отдельные файлы. Параметры запроса являются значениями, которые не имеют смысла, если нет цели использования, даже если они добавлены.

Параметры запроса могут быть прикодированы к пути в следующем формате:

<!-- クエリパラメータなし -->
<link rel="stylesheet" href="/css/site.css" />

<!-- クエリパラメータあり -->
<link rel="stylesheet" href="/css/site.css?key=value" />

Используя этот механизм, необходимо изменить путь, но вам не нужно переименовывать физический файл.

Добавление параметров запроса автоматически в программу (плохой пример)

Автоматически добавляя этот параметр запроса в программу, Вам не нужно вручную менять путь файла, если вы измените статический файл.

Простой пример заключается в том, чтобы добавить текущее время к параметрам запроса, когда пользователь получает доступ к веб-странице. Это очень просто, потому что я думаю, что вы можете написать в одной строке на любом языке программирования. Я думаю, что пример поколения выглядит так:

<link rel="stylesheet" href="/css/site.css?20210223120000" />

Тем не менее, это имеет недостаток, что преимущество кэширования теряется на всех. Путь меняется каждый раз, когда вы посещаете веб-страницу, даже если это тот же файл, что и предыдущий. Поскольку он распознается как отдельный файл, css файлы загружаются с сервера каждый раз. Старые версии файлов больше не будут использоваться, но это то же самое, что просто не использовать функции кэширования.

ASP.NET версии, добавляя параметры запроса в Core

Alcause нет предварительной ASP.NET Core обеспечивает стандартное решение этой проблемы кэширования.

Вам просто нужно добавить атрибут в тег, который описывает asp-append-version="true" путь файла следующим образом:

<link rel="stylesheet" href="~/css/site.css" asp-append-version="true"/>
<img src="/image/sample.png" asp-append-version="true"/>
<script src="~/js/site.js" asp-append-version="true"></script>

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

<link rel="stylesheet" href="/css/site.css?v=S2ihmzMFFc3FWmBWsR-NiddZWa8kbyaQYBx2FDkIoHs" />
<img src="/image/sample.png?v=Z0tUqQmLt_3L_NSzPmkbZKxL8cMxglf08BwWb5Od5z4" />
<script src="/js/site.js?v=dLGP40S79Xnx6GqUthRF6NWvjvhQ1nOvdVSwaNcgG18"></script>

Случайный строка придат, но это не меняется каждый раз, когда доступ сделан. Эта строка является значением хэша и генерируется на основе содержимого ссылаемого файла. Таким образом, одна и та же строка генерируется до тех пор, пока содержимое файла не меняется. Если содержимое файла изменится, он будет изменен на новую строку.

Это гарантирует, что кэшированные файлы являются предпочтительными, потому что если файлы одинаковы, пути одинаковы. По мере обновления файла путь меняется, так что вы можете скачать и использовать новый файл.

asp-append-version="true"Кстати, этот атрибут является стандартным только для статических файлов, помещенных в папку wwwroot. Обратите внимание, что случайные строки не расширены при наборе в другие файлы.

О примерной программе

Шаблон проекта по умолчанию .js шаблон asp-append-version сайта. Сайт.css не asp-append-version имеет приложения к нему.

Пример _Layout.cshtml программы добавляет .js и .css asp-append-version части файла. Мы также добавляем теги img в качестве asp-append-version ссылки.