Įtraukite versiją, nurodančią, kad talpykloje saugoma sena statinio failo versija yra atnaujinta, kad nebūtų naudojama

Puslapio sukūrimo data :

Kadangi priekinis etapas yra ilgas, jei norite pamatyti tik programą, praleiskite ją.

Aplinkos

Vizualinė studija
  • Vizualinė studija 2019
ASP.NET branduolys
  • 3.1 (Skustuvo puslapis, MVC)

Apie failų kaupimą talpykloje tinklapiuose

Kai lankotės tinklapyje, be HTML, .js failus (JavaScript), .css failus (stilių lapus) ir vaizdo failus atsisiunčiami klientui rodyti ir vykdyti. Tačiau kai kurie vaizdo failai yra dideli, o jų atsisiuntimas kiekvieną kartą gali būti brangus. Be to, .js failai ir .css failai dažnai naudojami kituose puslapiuose, todėl jų nereikia atsisiųsti kiekvieną kartą. Atsisiuntus šiuos failus galima laikinai įrašyti naršyklėje. Tai vadinama kaupimu talpykloje.

Jei failas saugomas talpykloje, pvz., HTML atsisiunčiamas iš žiniatinklio serverio, kai lankotės tame pačiame puslapyje. Kiti failai peržiūrimi ir paleidžiami naudojant vietoje saugomus failus jų neatsisiunčiant, jei yra talpykla. Tai sumažina serverio apkrovą ir leidžia klientui peržiūrėti puslapį dideliu greičiu, nenaudojant ryšio pralaidumo.

Problemos, kurias sukelia kaupimas talpykloje

Ar serveryje esantys failai ir talpykloje saugomi failai yra vienodi, paprastai priklauso nuo HTML aprašyto failo kelio. Tas pats failo kelias iš esmės yra talpykloje saugomi failai. (Gali būti ir kitų sąlygų, tačiau failo maršrutas yra tikras)

Toliau pateikiamas failo kelio pavyzdys. Taikomi href ir src atributo parametrai.

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

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

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

Tačiau šis elgesys gali būti problema.

Pavyzdžiui, jei vartotojas turi 1 versijos JavaScript failą, kai jis pirmą kartą jį pasiekia, 1 versijos JavaScript failas yra talpykloje. Tada serveris publikuoja 2 versijos JavaScript failą. Jei "JavaScript" failo kelias buvo tas pats, kai vartotojas lankėsi tame pačiame puslapyje, gali būti naudojamas 1 versijos "JavaScript" failas, saugomas neatsisiunčiant serverio 2 versijos "JavaScript" failo. Tai gali sukelti defektų, kurių visuomenė neketina.

Šiuo metu manau, kad dažnai matote "Pabandykite ištrinti talpyklą" kaip vieną iš atsakomųjų priemonių vartotojo pusėje, tačiau tai gali būti priežastis.

Kaip spręsti talpyklos problemas serverio pusėje

Kaip minėta pirmiau, ar naudojami talpykloje saugomi failai, labai priklauso nuo failo kelio (URL).

Todėl, kai atnaujinate failą, galite priversti jį atsisiųsti naują failą pakeisdami failo vardą.

Pavyzdžiui, jei 1 versijos failas

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

Kai failas buvo atnaujintas 2 versija

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

Site2 yra .css kliento pusėje.

Tačiau, jei tai padarysite rankiniu būdu, gali būti sudėtinga ir klaidų linkę keisti kelius ir pervardyti fizinius failus.

Užklausos parametrų įtraukimas į failo maršrutą

Tai, kaip veikia žiniatinklis, leidžia pridėti užklausos parametrus su raktų ir reikšmių deriniu po maršruto. Kliento talpyklos mechanizme, net jei fiziniai failai yra vienodi, jei užklausos parametrai skiriasi, jie bus atpažįstami kaip atskiri failai. Užklausos parametrai yra reikšmės, kurios neturi reikšmės, jei nėra naudojimo paskirties, net jei jos yra įtrauktos.

Užklausos parametrus prie maršruto galima pridėti šiuo formatu:

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

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

Naudodami šį mechanizmą, turite pakeisti kelią, bet jums nereikia pervardyti fizinio failo.

Automatiškai įtraukti užklausos parametrus į programą (blogas pavyzdys)

Automatiškai įtraukdami šį užklausos parametrą į programą, Jei pakeisite statinį failą, failo kelio keisti neautomatiniu būdu nereikia.

Paprastas pavyzdys yra pridėti dabartinį laiką užklausos parametrams, kai vartotojas pasiekia tinklapį. Tai labai paprasta, nes manau, kad galite rašyti vienoje eilutėje bet programavimo kalba. Manau, kad kartos pavyzdys atrodo taip:

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

Tačiau tai turi trūkumų, kad iš viso prarandamas talpyklos pranašumas. Maršrutas keičiasi kiekvieną kartą, kai lankotės tinklapyje, net jei jis yra tas pats failas kaip ir ankstesnis. Kadangi jis yra atpažįstamas kaip atskiras failas, CSS failai atsisiunčiami iš serverio kiekvieną kartą. Senesnės failų versijos nebebus naudojamos, tačiau tai yra tas pats, kas tiesiog nenaudojant talpyklos funkcijų.

ASP.NET versijų valdymą įtraukdami užklausos parametrus į "Core"

Alcause nėra iš anksto ASP.NET Core suteikia standartinį sprendimą šios talpyklos problema.

Jums tereikia įtraukti atributą į žymę, kuri apibūdina asp-append-version="true" failo kelią taip:

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

Jei iš tikrųjų apsilankysite puslapyje po to, kai jis bus paskelbtas žiniatinklyje, jis išsiplės taip:

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

Pridedama atsitiktinė eilutė, tačiau tai nesikeičia kiekvieną kartą, kai pasiekiama prieiga. Ši eilutė yra maišos reikšmė ir generuojama pagal nuorodos failo turinį. Todėl ta pati eilutė generuojama tol, kol failo turinys nesikeičia. Jei failo turinys pasikeis, jis bus pakeistas į naują eilutę.

Tai užtikrina, kad talpykloje saugomi failai yra pageidaujami, nes jei failai yra vienodi, keliai yra vienodi. Atnaujinus failą, maršrutas pasikeičia, todėl galite atsisiųsti ir naudoti naują failą.

asp-append-version="true"Beje, šis atributas yra standartinis tik statiniams failams, įdėtiems į wwwroot aplanką. Atkreipkite dėmesį, kad atsitiktinės eilutės neišplečiamos, kai jos nustatomos į kitus failus.

Apie programos pavyzdį

Numatytasis projekto šablonas .js svetainės asp-append-version šabloną. Svetainė.css asp-append-version prie jos nepridėta.

Programos pavyzdys _Layout.cshtml prideda failo svetainę.js ir svetainę.css. asp-append-version Mes taip pat pridėti img žymės kaip asp-append-version nuoroda.