Lisage versioon, mis näitab, et staatilise faili vahemällu talletatud vana versioon on kasutamise vältimiseks ajakohane

Lehe loomise kuupäev :

Kuna esietapp on pikk, kui soovite näha ainult programmi, jätke see vahele.

Keskkond

Visuaalstuudio
  • Visuaalstuudio 2019
ASP.NET Tuum
  • 3.1 (Raseerija leht, MVC)

Failide vahemällu talletamine veebilehtedel

Veebilehe külastamisel laaditakse kliendile kuvamiseks ja käivitamiseks lisaks HTML-ile ka .js faile (Javascript), .css faile (laadilehti) ja pildifaile. Kuid mõned pildifailid on suured ja nende allalaadimine iga kord võib olla kulukas. Samuti kasutatakse .js faile ja .css faile sageli teistel lehtedel ja neid ei ole vaja iga kord alla laadida. Need failid võidakse pärast allalaadimist ajutiselt brauserisse salvestada. Seda nimetatakse vahemällu salvestamiseks.

Kui fail on vahemällu talletatud, laaditakse HTML alla veebiserverist, kui külastate sama lehte. Muid faile vaadatakse ja käivitatakse kohalikult salvestatud failide abil ilma neid vahemälu korral alla laadimata. See vähendab serveri koormust ja võimaldab kliendil vaadata lehte suurel kiirusel ilma side läbilaskevõimet tarbimata.

Vahemällu salvestamisest tingitud probleemid

See, kas serverisse paigutatud failid ja vahemällu talletatud failid on samad, sõltub tavaliselt HTML-is kirjeldatud failiteed. Sama failitee on põhimõtteliselt vahemällu salvestatud failid. (Võib olla ka muid tingimusi, kuid faili tee on kindel)

Järgnev on näide failiteest. Rakenduvad href ja src atribuudi parameetrid.

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

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

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

Kuid selline käitumine võib olla probleem.

Näiteks kui kasutajal on sellele esmakordsel juurdepääsul versioon 1 JavaScripti fail, salvestatakse versiooni 1 JavaScripti fail vahemällu. Seejärel avaldab server versiooni 2 JavaScript faili. Kui JavaScripti failitee oli sama, kui kasutaja külastas sama lehte, võib kasutada versiooni 1 Javascripti faili, mis on vahemällu talletatud ilma serveri versiooni 2 JavaScripti faili alla laadimata. See võib põhjustada defekte, mida avalikkus ei kavatse.

Praegu arvan, et näete sageli "Proovige vahemälu kustutada" ühe kasutajapoolse vastumeetmetena, kuid see võib olla põhjus.

Kuidas lahendada vahemälu probleeme serveri poolel

Nagu eespool mainitud, sõltub vahemällu salvestatud failide kasutamine suuresti failitee (URL).

Seetõttu saate faili värskendamisel sundida seda uut faili alla laadima, muutes faili nime.

Näiteks kui versiooni 1 fail

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

Faili värskendamisel versioon 2

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

Site2 on kliendi poolel .css.

Kui aga teete seda käsitsi, võib teede muutmine ja füüsiliste failide ümbernimetamine olla tülikas ja tõrkeohtlik.

Päringuparameetrite lisamine failiteele

Veebi tööviis võimaldab teil lisada päringuparameetreid koos võtmete ja väärtuste kombinatsiooniga pärast teed. Kliendi vahemällu salvestamise mehhanismis, isegi kui füüsilised failid on samad, kui päringu parameetrid on erinevad, tuvastatakse need eraldi failidena. Päringu parameetrid on väärtused, millel pole tähendust, kui pole eesmärki kasutada isegi siis, kui need on lisatud.

Päringu parameetreid saab teele lisada järgmises vormingus:

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

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

Selle mehhanismi abil peate teed muutma, kuid te ei pea füüsilist faili ümber nimetama.

Päringuparameetrite automaatne lisamine programmis (halb näide)

Lisades selle päringuparameetri automaatselt programmi, Staatilise faili muutmisel ei pea te failiteed käsitsi muutma.

Lihtne näide on lisada praegune aeg päringu parameetritele, kui kasutaja siseneb veebilehele. See on väga lihtne, sest ma arvan, et sa võid kirjutada ühes reas mis tahes programmeerimiskeeles. Ma arvan, et põlvkonna näide näeb välja selline:

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

Kuid see on ebasoodne, et vahemällu salvestamise eelis on üldse kadunud. Tee muutub iga kord, kui veebilehte külastate, kuigi see on eelmisega sama fail. Kuna see tuvastatakse eraldi failina, laaditakse CSS-failid serverist alla iga kord. Failide vanemaid versioone enam ei kasutata, kuid see on sama, mis lihtsalt vahemällu salvestamise funktsioonide mittekasutamine.

versioonijuhtimise ASP.NET, lisades päringuparameetrid core'i

Alcause ei ole pre ASP.NET Core pakub standardlahendust sellele vahemällu salvestamise probleemile.

Peate lihtsalt lisama sildile atribuudi, mis kirjeldab asp-append-version="true" failiteed järgmiselt:

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

Kui külastate lehte pärast selle avaldamist veebis, laieneb see järgmiselt:

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

Lisatakse juhuslik string, kuid see ei muutu iga kord, kui juurdepääs tehakse. See string on räsiväärtus ja luuakse viidatud faili sisu põhjal. Seetõttu luuakse sama string, kui faili sisu ei muutu. Kui faili sisu muutub, muudetakse see uueks stringiks.

See tagab vahemällu talletatud failide eelistamise, kuna kui failid on samad, on teed samad. Faili värskendamisel muutub tee, et saaksite uue faili alla laadida ja kasutada.

asp-append-version="true"Muide, see atribuut on standardne ainult kausta wwwroot paigutatud staatiliste failide puhul. Pange tähele, et juhuslikke stringe ei laiendata, kui need on seatud teistele failidele.

Teave näidisprogrammi kohta

Saidimalli .js projekti asp-append-version vaikemall. Saidil.css pole asp-append-version sellele lisatud.

Näidisprogramm _Layout.cshtml lisab faili saidi.js ja asp-append-version saidi.css. Lisame viitena ka img asp-append-version silte.