Lisää versio, joka ilmaisee, että staattisen tiedoston välimuistiin tallennettu vanha versio on ajan tasalla, jotta sitä ei käytetä

Sivun luontipäivämäärä :

Koska etuvaihe on pitkä, jos haluat nähdä vain ohjelman, ohita se.

Ympäristö

Visuaalinen studio
  • Visual Studio 2019
ASP.NET ydin
  • 3.1 (Partaveitsisivu, MVC)

Tietoja Web-sivujen tiedostojen tallentamisesta välimuistiin

Kun vierailet Web-sivulla, HTML:n lisäksi .js (Javascript), .css -tiedostot (tyylisivut) ja kuvatiedostot ladataan asiakkaaseen näytettäväksi ja päteystä varten. Jotkut kuvatiedostot ovat kuitenkin suuria, ja niiden lataaminen joka kerta voi olla kallista. Myös .js tiedostoja .css tiedostoja käytetään usein muilla sivuilla, eikä niitä tarvitse ladata joka kerta. Nämä tiedostot saatetaan tallentaa selaimeen tilapäisesti lataamisen jälkeen. Tätä kutsutaan välimuistiksi.

Jos tiedosto on esimerkiksi välimuistissa, HTML ladataan Web-palvelimesta, kun vierailet samalla sivulla. Muita tiedostoja tarkastellaan ja suoritetaan paikallisesti tallennettujen tiedostojen avulla lataamatta niitä, jos niissä on välimuisti. Tämä vähentää palvelimen kuormitusta ja antaa asiakkaan tarkastella sivua suurella nopeudella kuluttamatta tietoliikenteen kaistanleveyttä.

Välimuistin aiheuttamat ongelmat

Se, ovatko palvelimeen sijoitetut tiedostot ja välimuistissa tallennetut tiedostot samat, riippuu yleensä HTML:ssä kuvatun tiedostopolun mukaan. Sama tiedostopolku on pohjimmiltaan välimuistissa olevia tiedostoja. (Muitakin ehtoja voi olla, mutta tiedostopolku on varma)

Seuraavassa on esimerkki tiedostopolusta. Href- ja src-määriteparametrit ovat voimassa.

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

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

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

Tämä toiminta voi kuitenkin olla ongelma.

Jos käyttäjällä on esimerkiksi version 1 JavaScript-tiedosto, kun hän käyttää sitä ensimmäisen kerran, version 1 JavaScript-tiedosto tallennetaan välimuistiin. Palvelin julkaisee sitten version 2 JavaScript-tiedoston. Jos JavaScript-tiedostopolku oli sama, kun käyttäjä vieraili samalla sivulla, voidaan käyttää versiota 1 Javascript-tiedosto, joka on tallennettu välimuistiin lataamatta palvelimen versiota 2 JavaScript-tiedostoa. Tämä voi aiheuttaa vikoja, joita yleisö ei aio.

Tällä hetkellä luulen, että näet usein "Yritä poistaa välimuisti" yhtenä vastatoimista käyttäjäpuolella, mutta tämä voi olla syy.

Välimuistiongelmien ratkaiseminen palvelinpuolella

Kuten edellä mainittiin, välimuistiin tallennettujen tiedostojen käyttö riippuu suurelta osin tiedostopolusta (URL).

Kun päivität tiedoston, voit pakottaa sen lataamaan uuden tiedoston muuttamalla tiedostonimeä.

Jos esimerkiksi version 1 tiedosto

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

Kun tiedosto päivitettiin, versio 2

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

Site2 .css asiakaspuolella.

Jos kuitenkin teet tämän manuaalisesti, voi olla hankalaa ja virhealttiita muuttaa polkuja ja nimetä fyysisiä tiedostoja uudelleen.

Kyselyparametrien lisääminen tiedostopolkuun

Webin toimintatavan avulla voit lisätä kyselyn parametreja, joissa on avainten ja arvojen yhdistelmä polun jälkeen. Asiakkaan välimuistimekanismissa, vaikka fyysiset tiedostot olisivat samat, jos kyselyparametrit ovat erilaiset, ne tunnistetaan erillisiksi tiedostoiksi. Kyselyparametrit ovat arvoja, joilla ei ole merkitystä, jos käyttötarkoitusta ei ole, vaikka ne lisättisi.

Kyselyn parametrit voidaan lisätä polkuun seuraavassa muodossa:

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

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

Tämän mekanismin avulla sinun on muutettava polkua, mutta sinun ei tarvitse nimetä fyysistä tiedostoa uudelleen.

Kyselyparametrien lisääminen automaattisesti ohjelmaan (huono esimerkki)

Lisäämällä tämän kyselyparametrin automaattisesti ohjelmaan, Sinun ei tarvitse muuttaa tiedostopolkua manuaalisesti, jos muutat staattista tiedostoa.

Helppo esimerkki on lisätä nykyinen aika kyselyparametreihin, kun käyttäjä käyttää Web-sivua. Se on hyvin helppoa, koska mielestäni voit kirjoittaa yhdellä rivillä millään ohjelmointikielellä. Luulen, että sukupolven esimerkki näyttää tältä:

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

Tällä on kuitenkin se haittapuoli, että välimuistin etu menetetään ollenkaan. Polku muuttuu aina, kun vierailet Web-sivulla, vaikka se on sama kuin edellinen. Koska se tunnistetaan erilliseksi tiedostoksi, css-tiedostot ladataan palvelimesta joka kerta. Tiedostojen vanhempia versioita ei enää käytetä, mutta tämä on sama kuin ei yksinkertaisesti käytä välimuistiominaisuuksia.

ASP.NET versionhallinta lisäämällä kyselyparametreja Coreen

Alcause ei ole ASP.NET Core tarjoaa vakioratkaisun tähän välimuistiongelmaan.

Sinun tarvitsee vain lisätä tunnisteeseen määrite, joka kuvaa asp-append-version="true" tiedostopolkua seuraavasti:

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

Jos todella vierailet sivulla sen jälkeen, kun se on julkaistu Webissä, se laajenee seuraavasti:

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

Satunnainen merkkijono on yhteydessä, mutta se ei muutu aina, kun käyttöoikeudet tehdään. Tämä merkkijono on hash-arvo, ja se luodaan viitattavan tiedoston sisällön perusteella. Tämän vuoksi sama merkkijono luodaan, kunhan tiedoston sisältö ei muutu. Jos tiedoston sisältö muuttuu, se muutetaan uudeksi merkkijonoksi.

Tämä varmistaa, että välimuistiin tallennetut tiedostot ovat ensisijaisia, koska jos tiedostot ovat samat, polut ovat samat. Kun tiedosto päivitetään, polku muuttuu, joten voit ladata ja käyttää uutta tiedostoa.

Muuten, asp-append-version="true" tämä määrite on vakio vain staattisia tiedostoja varten, jotka on sijoitettu wwwroot-kansioon. Huomaa, että satunnaisia merkkijonoja ei laajene, kun ne on määritetty muihin tiedostoihin.

Tietoja malliohjelmasta

Oletusprojektimalli on .js asp-append-version malli. Sivuston .css siihen asp-append-version ei ole lisäytettyä sivustoa.

Malliohjelma lisää _Layout.cshtml .js sivuston .css asp-append-version osan. Lisäämme myös img-tunnisteita asp-append-version viitteeksi.