Добавяне на версия, която показва, че кешираната стара версия на статичния файл е актуална, за да се избегне използване

Дата на създаване на страница :

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

Околната среда

Визуално студио
  • Изглед от 10 до 2008
ASP.NET ядро
  • 3.1 (Страницата на Бръснача, MVC)

За кеширането на файлове в Web страници

Когато посещавате уеб страница, освен HTML, .js файлове (Javascript), .css файлове (стилове) и файлове с изображения се изтеглят на клиента за показване и изпълнение. Въпреки това, някои файлове с изображения са големи, и изтеглянето им всеки път може да бъде скъпо. Също така, .js файлове и .css файлове често се използват на други страници, и няма нужда да ги изтеглите всеки път. Тези файлове могат да бъдат временно записани в браузъра ви след изтеглянето. Това се нарича кеширане.

Ако файлът е кеширан, например HTML се изтегля от уеб сървъра, когато посещавате същата страница. Други файлове се разглеждат и работят с локално съхранени файлове, без да ги изтеглят, ако има кеш. Това намалява натоварването на сървъра и позволява на клиента да видите страницата с висока скорост, без да се консумира комуникационна честотна лента.

Проблеми, причинени от кеширане

Дали файловете, поставени на сървъра и кешираните файлове са еднакви, обикновено зависи от пътя на файла, описан в HTML. Пътят към същия файл е кеширани файлове. (Възможно е да има други условия, но пътят на файла е сигурен)

По-долу е пример за път до файл. Важат параметрите на атрибута href и 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, когато те първи достъп до него, версия 1 JavaScript файлът е кеширан. Сървърът след това публикува javaScript файл версия 2. Ако пътят на файла JavaScript е същият, когато потребителят посети една и съща страница, версия 1 Javascript файл кеширан без изтегляне на сървъра версия 2 JavaScript файл може да се използва. Това може да причини дефекти, които обществеността не възнамерява.

По това време, мисля, че често виждате "Опитайте се да изтриете кеша" като един от мерките за противодействие на потребителя страна, но това може да е причината.

Как да се справите с кеш проблеми от страна на сървъра

Както бе споменато по-горе, дали кешираните файлове се използват зависи до голяма степен от пътя на файла (URL).

Затова когато актуализирате файл, можете да го принудите да изтеглите нов файл, като промените името на файла.

Например, ако файлът на версия 1

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

Когато файлът е актуализиран версия 2

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

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

Ако направите това ръчно, може да е тромаво и склонен към грешки да промените пътищата и преименуване на физически файлове.

Добавяне на параметри на заявка към път до файл

Начинът, по който работи Уеб, ви позволява да добавяте параметри на заявката с комбинация от ключове и стойности след пътя. В кеширане механизъм клиент, дори ако физически файлове са еднакви, ако параметрите на заявката са различни, те ще бъдат разпознати като отделни файлове. Параметри на заявката са стойности, които нямат значение, ако няма цел на употреба, дори ако те са добавени.

Параметрите на заявката могат да бъдат приложени към пътя в следния формат:

<!-- クエリパラメータなし -->
<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 контрол на версията чрез добавяне на параметри на заявката в ядро

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 препратка.