Pridanie verzie, ktorá označuje, že stará verzia statického súboru vo vyrovnávacej pamäti je aktuálna, aby sa zabránilo používaniu

Dátum vytvorenia strany :

Vzhľadom k tomu, predné fáze je dlhá, ak chcete vidieť len program, prosím, vynechajte ho.

Životné prostredie

Vizuálne štúdio
  • Visual Studio 2019
ASP.NET jadro
  • 3.1 (Britva strana, MVC)

Ukladanie súborov do vyrovnávacej pamäte na webových stránkach

Keď navštívite webovú stránku, okrem HTML, .js súbory (Javascript), .css súbory (šablóny so štýlmi) a obrázkové súbory sa prevezmú klientovi na zobrazenie a vykonanie. Niektoré obrázkové súbory sú však veľké a ich sťahovanie môže byť vždy nákladné. Súbory .js súbory a .css sa často používajú na iných stránkach a nie je potrebné ich zakaždým sťahovať. Tieto súbory môžu byť po stiahnutí dočasne uložené v prehliadači. Toto sa nazýva ukladanie do vyrovnávacejky.

Ak je súbor vo vyrovnávacej pamäti, napríklad HTML sa prevezme z webového servera pri návšteve tej istej stránky. Ostatné súbory sa prezerá a spúšťa pomocou lokálne uložených súborov bez ich sťahovania, ak existuje vyrovnávacia pamäť. To znižuje zaťaženie servera a umožňuje klientovi zobraziť stránku vysokou rýchlosťou bez toho, aby spotrebúval šírku pásma komunikácie.

Problémy spôsobené uchytením do vyrovnávacej

To, či sú súbory umiestnené na serveri a súbory vo vyrovnávacej pamäti rovnaké, vo všeobecnosti závisí od cesty k súborom popísanej vo formáte HTML. Rovnaká cesta k súboru je v podstate súbory vo vyrovnávacej pamäti. (Môžu existovať aj iné podmienky, ale cesta k súboru je istá)

Nasleduje príklad cesty k súboru. Platia parametre atribútov href a src.

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

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

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

Toto správanie však môže byť problém.

Ak má napríklad používateľ súbor JavaScript verzie 1 pri prvom prístupe k nemu, súbor JavaScript verzie 1 sa ukladá do vyrovnávacej pamäte. Server potom publikuje súbor JavaScript verzie 2. Ak bola cesta k súboru JavaScript rovnaká, keď používateľ navštívil rovnakú stránku, môže sa použiť súbor Javascript verzie 1 vo vyrovnávacej pamäti bez sťahovania súboru JavaScript verzie 2 servera. To môže spôsobiť chyby, ktoré verejnosť nemá v úmysle.

V tejto dobe si myslím, že často vidíte "Pokúsiť sa odstrániť vyrovnávaciu pamäť" ako jeden z protiopatrení na strane používateľa, ale to môže byť príčinou.

Ako riešiť problémy s vyrovnávacou pamäťou na strane servera

Ako je uvedené vyššie, či sa používajú súbory vo vyrovnávacej pamäti, závisí vo veľkej miere od cesty k súboru (URL).

Preto pri aktualizácii súboru, môžete vynútiť prevziať nový súbor zmenou názvu súboru.

Napríklad, ak súbor verzie 1

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

Pri aktualizácii súboru verzie 2

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

Site2 .css na strane klienta.

Ak to však urobíte manuálne, môže byť ťažkopádne a náchylné na chyby zmeniť cesty a premenovať fyzické súbory.

Pridanie parametrov dotazu do cesty k súboru

Spôsob, akým web funguje, vám umožňuje pridať parametre dotazu s kombináciou kľúčov a hodnôt po ceste. V mechanizme vyrovnávacej pamäte klienta, aj keď fyzické súbory sú rovnaké, ak parametre dotazu sú odlišné, budú rozpoznané ako samostatné súbory. Parametre dotazu sú hodnoty, ktoré nemajú žiadny význam, ak nie je účel použitia, aj keď sú pridané.

Parametre dotazu je možné pripojiť k ceste v nasledujúcom formáte:

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

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

Pomocou tohto mechanizmu je potrebné zmeniť cestu, ale nie je potrebné premenovať fyzický súbor.

Automatické pridávanie parametrov dotazu v programe (zlý príklad)

Automatickým pridaním parametra dotazu do programu Ak zmeníte statický súbor, nemusíte manuálne meniť cestu k súboru.

Jednoduchým príkladom je pridanie aktuálneho času do parametrov dotazu, keď používateľ pristupuje na webovú stránku. Je to veľmi jednoduché, pretože si myslím, že môžete písať v jednom riadku v akomkoľvek programovacom jazyku. Myslím, že príklad generácie vyzerá takto:

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

To má však nevýhodu, že výhoda uchytenia do vyrovnávacej zariadenia je vôbec stratená. Cesta sa zmení pri každej návšteve webovej stránky, aj keď ide o rovnaký súbor ako predchádzajúci. Pretože je rozpoznaný ako samostatný súbor, css súbory sa sťahujú zo servera zakaždým. Staršie verzie súborov sa už nebudú používať, ale je to rovnaké ako jednoduché nepoužívanie funkcií ucha.

ASP.NET verziu pridaním parametrov dotazu do jadra

Alcause neexistuje žiadny ASP.NET Core poskytuje štandardné riešenie tohto problému s vyrovnávacouškou.

Stačí pridať atribút k značke, ktorá popisuje asp-append-version="true" cestu k súboru takto:

<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>

Ak stránku skutočne navštívite po jej publikovaní na webe, rozšíri sa takto:

<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>

Náhodný reťazec je prilodený, ale to sa nezmení zakaždým, keď je prístup. Tento reťazec je hodnota hash a je generovaný na základe obsahu odkazovaný súbor. Preto rovnaký reťazec je generovaný tak dlho, ako obsah súboru sa nezmení. Ak sa zmení obsah súboru, zmení sa na nový reťazec.

Tým sa zabezpečí, že sa uprednostňujú súbory vo vyrovnávacej pamäti, pretože ak sú súbory rovnaké, cesty sú rovnaké. Po aktualizácii súboru sa cesta zmení, takže môžete prevziať a používať nový súbor.

asp-append-version="true"Mimochodom, tento atribút je štandardný len pre statické súbory umiestnené v priečinku wwwroot. Všimnite si, že náhodné reťazce nie sú rozbalené, keď sú nastavené na iné súbory.

O vzorový program

Predvolená šablóna projektu .js asp-append-version šablóne lokality. Stránka.css asp-append-version nemá k tomu prilomenú.

Ukážkový program _Layout.cshtml pridá .js lokalitu a .css asp-append-version súboru. Ako referenciu pridávame aj značky asp-append-version img.