Adjon hozzá egy verziót, amely azt jelzi, hogy a statikus fájl gyorsítótárazott régi verziója naprakész a használata elkerülése érdekében

Oldal létrehozásának dátuma :

Mivel az első szakasz hosszú, ha csak a programot szeretné látni, kérjük, hagyja ki.

Környezet

Visual Stúdió
  • Visual Studio 2019
ASP.NET mag
  • 3.1 (Borotva oldal, MVC)

Fájlok gyorsítótárazása weblapokon

Amikor meglátogat egy weblapot, a HTML mellett .js fájlok (Javascript), .css fájlok (stíluslapok) és képfájlok is letölthetők az ügyfélnek megjelenítésre és végrehajtásra. Egyes képfájlok azonban nagyok, és a letöltésük minden alkalommal költséges lehet. Is, .js fájlokat és .css fájlokat gyakran használják más oldalakon, és nincs szükség, hogy töltse le őket minden alkalommal. Ezek a fájlok a letöltés után ideiglenesen menthetők a böngészőbe. Ezt hívják gyorsítótárazásnak.

Ha például a fájl gyorsítótárazott, a HTML letöltése a webkiszolgálóról történik, amikor ugyanazt a lapot látogatja meg. Más fájlokat helyileg tárolt fájlokkal tekint meg és futtat, anélkül, hogy letöltenélek őket, ha van gyorsítótár. Ez csökkenti a kiszolgáló terhelését, és lehetővé teszi az ügyfél számára, hogy nagy sebességgel tekintse meg az oldalt a kommunikációs sávszélesség fogyasztása nélkül.

Gyorsítótárazás okozta problémák

Az, hogy a kiszolgálón elhelyezett fájlok és a gyorsítótárazott fájlok azonosak-e, általában a HTML-ben leírt fájl elérési úttól függ. Ugyanaz a fájl elérési útja alapvetően gyorsítótárazott fájlok. (Lehetnek más feltételek is, de a fájl elérési útja biztos)

Az alábbiakban egy fájl elérési útját mutatunk be. A href és az src attribútumparaméterei érvényesek.

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

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

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

Ez a viselkedés azonban problémát jelenthet.

Ha például egy felhasználónak 1-es verziójú JavaScript-fájlja van, amikor először hozzáfér, a rendszer gyorsítótárazza az 1-es verziójú JavaScript-fájlt. A kiszolgáló ezután közzéteszi a 2-es verziójú JavaScript fájlt. Ha a JavaScript fájl elérési útja ugyanaz volt, amikor a felhasználó ugyanazon az oldalon járt, a kiszolgáló 2-es verziójának Letöltése nélkül gyorsítótárazott Javascript fájl használható. Ez olyan hibákat okozhat, amelyek a nyilvánosság számára nem áll szándékában.

Ebben az időben, azt hiszem, hogy gyakran látni "Próbálja törölni a cache", mint az egyik ellenintézkedések a felhasználói oldalon, de ez lehet az oka.

Hogyan kell kezelni a cache problémákat a kiszolgáló oldalán

Mint már említettük, hogy a gyorsítótárazott fájlokat használják-e, nagyban függ a fájl elérési útján (URL).

Ezért egy fájl frissítésekor kényszerítheti, hogy töltsön le egy új fájlt a fájlnév módosításával.

Ha például egy 1-es verziójú fájl

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

Amikor a fájl frissült 2-es verzió

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

A Site2 .css ügyféloldalon található.

Ha azonban ezt manuálisan teszi, nehézkes és hibalehetőségeket válthat az elérési utak megváltoztatására és a fizikai fájlok átnevezésére.

Lekérdezési paraméterek hozzáadása fájlútvonalhoz

A web működése lehetővé teszi lekérdezési paraméterek hozzáadását kulcsok és értékek kombinációjával az elérési út után. Az ügyfél gyorsítótárazási mechanizmusában, még akkor is, ha a fizikai fájlok azonosak, ha a lekérdezés paraméterei eltérőek, a rendszer külön fájlként ismeri fel őket. A lekérdezési paraméterek olyan értékek, amelyeknek nincs jelentésük, ha nincs használati cél, még akkor sem, ha hozzáadják őket.

A lekérdezési paraméterek a következő formátumban hozzáfűzhetőek az elérési úthoz:

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

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

Ezzel a mechanizmussal meg kell változtatnia az elérési utat, de nem kell átnevezni a fizikai fájlt.

Lekérdezési paraméterek automatikus hozzáadása a programban (rossz példa)

Ha automatikusan hozzáadja ezt a lekérdezési paramétert a programban, Ha megváltoztatja a statikus fájlt, nem kell manuálisan megváltoztatnia a fájl elérési útját.

Egy egyszerű példa, hogy adjunk az aktuális időt a lekérdezési paramétereket, amikor a felhasználó hozzáfér a weblapot. Ez nagyon egyszerű, mert azt hiszem, lehet írni egy sorban bármilyen programozási nyelven. Azt hiszem, a generációs példa így néz ki:

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

Ez azonban azzal a hátrányokkal jár, hogy a gyorsítótárazás előnye egyáltalán elvész. Az elérési út minden alkalommal megváltozik, amikor meglátogat egy weblapot, még akkor is, ha ugyanaz a fájl, mint az előző. Mivel a rendszer külön fájlként ismeri fel, a css fájlok minden alkalommal letöltődnek a kiszolgálóról. A fájlok régebbi verziói már nem lesznek használatban, de ez ugyanaz, mint egyszerűen nem használ gyorsítótárazási funkciókat.

ASP.NET verzióvezérlés lekérdezési paraméterek hozzáadásával a Core-ban

Alcause nincs pre-ASP.NET Core nyújt szabványos megoldást erre a gyorsítótárazási probléma.

Csak hozzá kell adnia egy attribútumot a címkéhez, amely a asp-append-version="true" következőképpen írja le a fájl elérési útját:

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

Ha ténylegesen meglátogatja a lapot az interneten való közzététel után, az a következőképpen bővül:

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

A rendszer egy véletlenszerű karakterláncotfűz, de ez nem változik minden alkalommal, amikor a hozzáférés történik. Ez a karakterlánc kivonatérték, és a hivatkozott fájl tartalma alapján jön létre. Ezért ugyanaz a karakterlánc jön létre, amíg a fájl tartalma nem változik. Ha a fájl tartalma megváltozik, az új karakterláncra változik.

Ez biztosítja, hogy a gyorsítótárazott fájlok előnyben részesednek, mert ha a fájlok azonosak, az elérési utak ugyanazok. A fájl frissítésével az elérési út megváltozik, így letöltheti és használhatja az új fájlt.

Egyébként ez asp-append-version="true" az attribútum csak a wwwroot mappába helyezett statikus fájlokra szabványos. Ne feledje, hogy a véletlenszerű karakterláncok nem bontják ki, ha más fájlokra vannak állítva.

A mintaprogramról

A webhelysablon .js asp-append-version projektsablon. Webhely.css asp-append-version nem rendelkezik hozzáfűzve.

A mintaprogram _Layout.cshtml hozzáadja a .js és a .css a asp-append-version fájl webhelyét és webhelyét. Mi is hozzá img címkék asp-append-version referenciaként.