Pievienot versiju, kas norāda, ka kešotā vecā statiskā faila versija ir atjaunināta, lai izvairītos no izmantošanas

Lapas izveides datums :

Tā kā priekšējā skatuve ir gara, ja vēlaties redzēt tikai programmu, lūdzu, izlaidiet to.

Vides

Vizuālā studija
  • Visual Studio 2019
ASP.NET kodols
  • 3.1 (Skuvekļa lapa, MVC)

Par failu kešdarbošanu Web lappusēs

Apmeklējot Web lappusi, papildus HTML klientam tiek lejupielādēti .js faili (Javascript), .css faili (stilu lapas) un attēlu faili. Tomēr daži attēlu faili ir lieli, un to lejupielāde katru reizi var būt dārga. Arī .js faili un .css faili bieži tiek izmantoti citās lapās, un tie nav jālejupielādē katru reizi. Pēc lejupielādes šie faili var tikt īslaicīgi saglabāti pārlūkprogrammā. To sauc par kešdari.

Ja fails ir kešatmiņā, piemēram, HTML tiek lejupielādēts no Web servera, kad apmeklējat to pašu lapu. Citi faili tiek skatīti un palaisti, izmantojot lokāli saglabātos failus, tos nelejupielādējot, ja ir kešatmiņa. Tas samazina servera noslodzi un ļauj klientam skatīt lapu lielā ātrumā, nepaēšot saziņas joslas platumu.

Kešdarīšanas radītās problēmas

Tas, vai serverī ievietotie faili un kešatmiņā saglabātie faili parasti ir vienādi, parasti ir atkarīgs no HTML aprakstītā faila ceļa. Tas pats faila ceļš būtībā ir kešatmiņā saglabāti faili. (Var būt arī citi nosacījumi, bet faila ceļš ir noteikts)

Tālāk sniegts faila ceļa piemērs. Piemēro href un src atribūtu parametrus.

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

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

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

Tomēr šī darbība var būt problēma.

Piemēram, ja lietotājam, pirmo reizi piekļūstot tam, ir JavaScript 1. versijas fails, JavaScript 1. versijas fails tiek ievietots kešatmiņā. Pēc tam serveris publicē JavaScript 2. versijas failu. Ja JavaScript faila ceļš bija tāds pats, kad lietotājs apmeklēja to pašu lapu, var izmantot 1. versijas Javascript failu, kas kešots, nelejupielādējot servera versijas 2 JavaScript failu. Tas var radīt defektus, kurus sabiedrība neplāno.

Šajā laikā es domāju, ka jūs bieži redzat "Mēģināt izdzēst kešatmiņu" kā vienu no pretpasākumiem lietotāja pusē, bet tas var būt iemesls.

Kā risināt kešatmiņas problēmas servera pusē

Kā minēts iepriekš, tas, vai tiek izmantoti kešatmiņā saglabātie faili, lielā mērā ir atkarīgs no faila ceļa (URL).

Tāpēc, atjauninot failu, to var piespiest lejupielādēt jaunu failu, mainot faila nosaukumu.

Piemēram, ja 1. versijas fails

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

Kad fails tika atjaunināts , versija 2

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

Site2 .css klienta pusē.

Tomēr, ja to darāt manuāli, var būt apgrūtinoši un ar kļūdām tendēti mainīt ceļus un pārdēvēt fiziskos failus.

Vaicājuma parametru pievienošana faila ceļam

Web veids ļauj pievienot vaicājuma parametrus ar taustiņu un vērtību kombināciju pēc ceļa. Klienta kešdarfamehānismā, pat ja fiziskie faili ir vienādi, ja vaicājuma parametri atšķiras, tie tiks atpazīti kā atsevišķi faili. Vaicājuma parametri ir vērtības, kas nav nozīmes, ja nav lietojuma mērķa pat tad, ja tās ir pievienotas.

Vaicājuma parametrus ceļam var pievienot šādā formātā:

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

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

Izmantojot šo mehānismu, jums ir jāmaina ceļš, bet fiziskais fails nav jāpārdēvē.

Vaicājuma parametru automātiska pievienošana programmā (nederīgs piemērs)

Automātiski pievienojot šo vaicājuma parametru programmā, Ja maināt statisko failu, faila ceļš nav jāmaina manuāli.

Vienkāršs piemērs ir pievienot pašreizējo laiku parametru vaicājumam, kad lietotājs piekļūst Web lappusei. Tas ir ļoti viegli, jo es domāju, ka jūs varat rakstīt vienā rindā jebkurā programmēšanas valodā. Es domāju, ka paaudzes piemērs izskatās šādi:

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

Tomēr tam ir trūkums, ka kešdarīšanas priekšrocība vispār tiek zaudēta. Ceļš mainās ikreiz, kad apmeklējat Web lappusi, lai gan tas ir tāds pats kā iepriekšējais fails. Tā kā CSS faili tiek atpazīti kā atsevišķs fails, tie katru reizi tiek lejupielādēti no servera. Vecākas failu versijas vairs netiks izmantotas, bet tas ir tas pats, kas vienkārši neizmantojot kešdarbošanas līdzekļus.

ASP.NET versiju kontroli, pievienojot vaicājuma parametrus core

Alcause nav iepriekšējas ASP.NET Core nodrošina standarta risinājumu šai kešdarbes problēmai.

Tagam ir tikai jāpievieno asp-append-version="true" atribūts, kas apraksta faila ceļu šādi:

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

Ja tiešām apmeklējat lapu pēc tās publicēšanas tīmeklī, tā tiks izvērsta šādi:

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

Tiek pievienota nejauša virkne, bet tas nemainās katru reizi, kad tiek veikta piekļuve. Šī virkne ir jaucējā vērtība, un tā tiek ģenerēta, pamatojoties uz atsauces faila saturu. Tāpēc tā pati virkne tiek ģenerēta, kamēr faila saturs nemainās. Ja faila saturs mainās, tas tiek mainīts uz jaunu virkni.

Tas nodrošina, ka kešotajiem failiem tiek dota priekšroka, jo, ja faili ir vienādi, ceļi ir vienādi. Atjauninot failu, ceļš mainās, lai varētu lejupielādēt un izmantot jauno failu.

Starp asp-append-version="true" citu, šis atribūts ir standarts tikai statiskiem failiem, kas ievietoti wwwroot mapē. Ņemiet vērā, ka nejaušas virknes netiek izvērstas, ja tās ir iestatītas uz citiem failiem.

Par programmas paraugu

Noklusējuma projekta veidne .js asp-append-version veidne. Vietnes .css tam asp-append-version nav pievienots.

Programmas _Layout.cshtml paraugs pievieno faila .js vietni .css asp-append-version vietni. Mēs pievienojam arī img tagus asp-append-version kā atsauci.