Tilføj en version, der angiver, at den cachelagrede gamle version af den statiske fil er opdateret for at undgå at blive brugt

Dato for oprettelse af side :

Da den forreste fase er lang, hvis du kun vil se programmet, skal du springe det over.

Miljø

Visual Studio
  • Visual Studio 2019
ASP.NET Kerne
  • 3.1 (Barberbladsside, MVC)

Om cachelagring af filer på websider

Når du besøger en webside ud over HTML, hentes .js filer (Javascript), .css filer (typografiark) og billedfiler til klienten til visning og udførelse. Nogle billedfiler er dog store, og det kan være dyrt at downloade dem hver gang. Også .js filer og .css filer bruges ofte på andre sider, og der er ingen grund til at downloade dem hver gang. Disse filer gemmes muligvis midlertidigt i browseren, når de er hentet. Dette kaldes cachelagring.

Hvis filen f.eks. Andre filer vises og køres ved hjælp af lokalt gemte filer uden at hente dem, hvis der er en cache. Dette reducerer belastningen på serveren og gør det muligt for klienten at få vist siden med høj hastighed uden at forbruge kommunikationsbåndbredde.

Problemer forårsaget af cachelagring

Om de filer, der er placeret på serveren og de cachelagrede filer, er de samme, afhænger generelt af den filsti, der er beskrevet i HTML-koden. Den samme filsti er dybest set cachelagrede filer. (Der kan være andre betingelser, men filstien er sikker)

Følgende er et eksempel på en filsti. Attributparametrene for href og src gælder.

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

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

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

Denne funktionsmåde kan dog være et problem.

Hvis en bruger f.eks. har en JavaScript-version 1-fil, første gang vedkommende får adgang til den, cachelagres JavaScript-filen version 1. Serveren udgiver derefter JavaScript-filen version 2. Hvis JavaScript-filstien var den samme, da brugeren besøgte den samme side, kan den Javascript-fil fra version 1, der er cachelagret uden at hente JavaScript-filen til serverversion 2, blive brugt. Dette kan forårsage fejl, som offentligheden ikke har til hensigt.

På dette tidspunkt tror jeg, at du ofte ser "Prøv at slette cachen" som en af modforanstaltningerne på brugersiden, men dette kan være årsagen.

Sådan håndteres cacheproblemer på serversiden

Som nævnt ovenfor afhænger om cachelagrede filer bruges i høj grad af filstien (URL).

Når du opdaterer en fil, kan du derfor tvinge den til at hente en ny fil ved at ændre filnavnet.

Hvis en version 1-fil f.eks.

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

Da filen blev opdateret version 2

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

Site2 er .css på klientsiden.

Men hvis du gør dette manuelt, kan det være besværligt og fejlbehæftet at ændre stier og omdøbe fysiske filer.

Føje forespørgselsparametre til en filsti

På den måde, webstedet fungerer på, kan du tilføje forespørgselsparametre med en kombination af nøgler og værdier efter stien. Hvis forespørgslens parametre er forskellige, genkendes de som separate filer, selvom de fysiske filer er ens i klientcachingmekanismen. Forespørgselsparametre er værdier, der ikke har nogen betydning, hvis der ikke er noget formål med at bruge, selvom de tilføjes.

Forespørgselsparametre kan føjes til stien i følgende format:

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

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

Ved hjælp af denne mekanisme skal du ændre stien, men du behøver ikke at omdøbe den fysiske fil.

Tilføje forespørgselsparametre automatisk i programmet (forkert eksempel)

Hvis du automatisk tilføjer denne forespørgselsparameter i programmet, Du behøver ikke at ændre filstien manuelt, hvis du ændrer den statiske fil.

Et let eksempel er at føje det aktuelle klokkeslæt til forespørgselsparametre, når en bruger får adgang til en webside. Det er meget nemt, fordi jeg tror, du kan skrive i en linje i ethvert programmeringssprog. Jeg tror, at generation eksempel ser sådan ud:

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

Dette har dog den ulempe, at fordelen ved caching overhovedet går tabt. Stien ændres, hver gang du besøger en webside, selvom den er den samme fil som den forrige. Da css-filer genkendes som en separat fil, hentes de hver gang fra serveren. Ældre versioner af filer vil ikke længere blive brugt, men det er det samme som simpelthen ikke at bruge cachelagringsfunktioner.

ASP.NET versionskontrol ved at tilføje forespørgselsparametre i Core

Alcause der er ingen pre ASP.NET Core giver en standard løsning på denne cachelagring problem.

Du skal blot føje en attribut til den kode, der beskriver asp-append-version="true" filstien på følgende måde:

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

Hvis du rent faktisk besøger siden, efter at den er udgivet på World Wide Web, udvides den på følgende måde:

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

Der tilføjes en tilfældig streng, men den ændres ikke, hver gang der oprettes adgang. Denne streng er en hash-værdi og genereres på basis af indholdet af den fil, der refereres til. Derfor genereres den samme streng, så længe indholdet af filen ikke ændres. Hvis indholdet af filen ændres, ændres det til en ny streng.

Dette sikrer, at cachelagrede filer foretrækkes, for hvis filerne er ens, er stierne de samme. Efterhånden som filen opdateres, ændres stien, så du kan hente og bruge den nye fil.

Forresten asp-append-version="true" er denne attribut kun standard for statiske filer, der er placeret i mappen wwwroot. Bemærk, at tilfældige strenge ikke udvides, når de er indstillet til andre filer.

Om eksempelprogrammet

Standardprojektskabelonen .js asp-append-version webstedsskabelon. Websted.css har ikke asp-append-version føjet en tilføjelse til det.

Eksempelprogrammet _Layout.cshtml tilføjer websted.js og websted.css af asp-append-version filen. Vi tilføjer også img-tags som asp-append-version reference.