Intelligens gyorsítótár és verzióképzési javascript

Ehhez Js és Css fájl adott fejléceket, hogy egy biztonságos gyorsítótárat.

De mi történik akkor, ha bizonyos fájlokat változás a fejlesztési folyamat? Minden felhasználó a cache a régi verzió -, amíg a cache naprakész, majd a tömeges panaszok törött integrációja szerver és kliens oldalon.

A helyes módja a cache és verziókezelési teljesen kiküszöböli ezt a problémát, és egy megbízható, átlátható és szinkronizált változatát a stílus / script.

A legegyszerűbb módja a cache statikus erőforrások - használata ETag.

Csak kapcsolja be a megfelelő szerver konfigurációs (Apache alapértelmezés szerint) - az egyes fájlok címeket kapnak ETag - hash, attól függ, hogy az idő a frissítés, a fájl mérete és (az inode-alapú fájlrendszerek) leírója.

A böngésző gyorsítótárban tárolja a fájlt, és a jövőben kéri Meghatározza a cél fejléc Ha-None-Match ETag tárolt dokumentumban. Miután megkapta egy ilyen cím, a szerver nem tud válaszolni egy 304 -, majd a dokumentumot kell venni a gyorsítótárból.

Úgy néz ki, mint ez:

Az első kérés a szerver (nettó készpénz)

Általában a böngésző általában hozzáad egy csomag fejléc típus User-Agent, elfogadás, stb A rövidség kedvéért, vágják.

Válasz a szervertől a kiszolgáló elküldi a dokumentumot válaszul kód: 200 c és ETag:

A következő böngésző kérésére A következő kérés böngésző add If-None-Match. (Tárolt ETag):

szerver szerver néz - igen, a dokumentum nem változik. Így adhat kód 304, és nem küldje újra a dokumentumot.

Alternatív - ha a dokumentum megváltozott, akkor a szerver csak elküldi a 200 az új ETag.

Hasonlóan működik ínszalag Last-Modified + If-Modified-Since.

  1. a szerver küld az utolsó módosítás dátuma szerint cím Last-Modified (ahelyett ETag)
  2. A böngésző gyorstárazza a dokumentumot, és a következő kérés küldi ugyanazt a dokumentumot elavult tárolt változat a címben If-Modified-Since (ahelyett, hogy az If-None-Match)
  3. A szerver ellenőrzi a dátumot, és ha a dokumentum nem változott - csak küldi a kódot 304, tartalom nélküli.

Ezek a módszerek stabil és jó, de a böngésző minden esetben van, hogy a kereslet az egyes script vagy stílust.

Az általános megközelítés verzióarchiválási - röviden:

Következő fogjuk vizsgálni, hogyan lehet ezt a folyamatot az automatikus és átlátható.

Merev caching - egyfajta kalapáccsal, hogy teljesen köröm a kéréseket a szerver a tárolt dokumentumokat.

Elég hozzá fejlécek lejár, és a Cache-Control: max-kor.

Például tárolt változat 365 napig PHP:

Vagy akkor a cache tartalmat sokáig segítségével mod_header Apache:

Kézhezvételét követő fejlécek, a böngésző mereven zakeshiruet dokumentum sokáig. Minden további hivatkozás a dokumentum kerül felszolgálásra közvetlenül a böngésző cache értesítése nélkül a szerver.

Nézzük meg, hogyan lehet automatikusan és megszakítás nélkül módosíthatja a verzió nem átnevezés fájlok ugyanabban az időben.

A legegyszerűbb - az, hogy az változat nevét az eredeti fájl nevét.

A Apache szinten, akkor lehet, hogy a mod_rewrite:

Ez a szabály kezeli az összes css / js / gif / png / jpg-fájlokat, kivágása a változat nevét.

De amellett, vágott verzió - is hozzá kell fejlécek kemény caching fájlokat. Erre a célra mod_header irányelv:

És minden együtt van ilyen eszközök apachevy config:

Mivel a munkarend modul mod_rewrite, a RewriteRule kell tenni a fő konfigurációs fájl httpd.conf vagy kapcsolódik hozzá (többek között) a fájlokat, de semmi esetre sem a .htaccess. különben Fejes parancsot le kell futtatni az első, mielőtt a változó be van állítva VERSIONED_FILE.

Fejlécparanccsal bárhol lehet, még a .htaccess - nem tesz különbséget.

Hogyan tegye a szkript nevét verzió - függ a template rendszer és általában, a módszer, hogy adjunk szkriptek (stílusok, stb.)

Például, ha a módosítás dátumát és verziójától sablon motor Smarty - linkek tudunk az alábbiak szerint:

Funkció változat egészíti verzió:

Eredmények oldalanként:

Hogy elkerüljék a felesleges hívások stat. Meg lehet tárolni egy tömb aktuális listáját változat egy külön változót

Ebben az esetben egy HTML egyszerűen esetben az aktuális verzió a tömbben.

Akkor át mindkét megközelítés, és tervezési idejű változata a módosítás dátumát - a relevancia és a termelés - változata Stabil teljesítmény.

Ez akkor hasznos, ha egy dokumentum változott, de a böngésző mindig aktuális legújabb verziója.

  • nyomtatható változat

A másik az, hogy megváltoztatni a fájl nevét hash és kódoló be egy 36 hexadecimális (rövid).
Előnyök:
- „Version” függ a tényleges tartalom (azaz lehetséges, és térjen vissza a régi verziót a forgatókönyvet egy régi böngészőt használ cache);
- nem függ a fájl módosítási ideje;
- biztonság növelése (a fájl kérés szükséges ismerni a hash, nem csak egy név).
hátrányai:
- Újraformázása a szkript megváltoztatja a hash (de ez a helyzet (újraformázása), véleményem szerint ez nem valószínű);
- Csak akkor változtassa meg a forgatókönyvet, és megváltoztatja az oldal szövege (kijavítani a hibákat a forgatókönyv csak akkor lehetséges, hogy egy különleges mechanizmust, de kétlem, hogy nagy szükség van).

Úgy tűnik, minden olyan nagyon rossz volt.

Például benyomásával firefoxe reload firefox gomb is elküldi az összes elemet KERES pontozás cache-t. A válasz természetesen megkapja a 306, de ennek ellenére miért küld kéréseket.

Igen, működik reload Firefox. És, akkor nyomja meg a Ctrl-F5, és nem az összes kérelmet 200. Csak ez váljanak. És amikor séta az oldalakon az összes futó alkalmazást.

Mivel a munkarend modul mod_rewrite, a RewriteRule kell tenni a fő konfigurációs fájl httpd.conf vagy kapcsolódik hozzá (többek között) a fájlokat, de semmi esetre sem a .htaccess, különben Fejes parancsot le kell futtatni az első, mielőtt a telepített változó VERSIONED_FILE.

És nem tudja megváltoztatni a sorrendben, a rendelést?
Ez nem mindig lehetséges, hogy a fő konfigurációs fájl

Állok a következő feladatokat látja el:
Vannak statikus js-fájlokat héderben oldalon. Telepített webes alkalmazást ez az oldal (html), amely az egyetlen része a nagy projekt ASP.NET.
Meg kell dolgozni anélkül cache-kérést a szerver még a teszt verzió. Ie az alkalmazás frissítéséhez tudott, ha tiszta a böngésző cache. Ebben az esetben, az IIS 7 szerver, hogy nem lehet beállítani. Az ASP.NET is beékelődött kívánatos.
Döntés még nem találták meg.