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