Korábban csak a HTML fejlécek módosítgatásával lehetett jelezni egy böngészőnek, hogy gyorsítótárazható a tartalom. Ezekkel lehetett csalni kicsit a webszerverben is, vagy az oldalt generáló scriptben is. A HTML5-ben viszont megjelent az úgynevezett „Application cache”, ami a weboldal offline (Internet kapcsolat nélküli) módjához ad egy leírót a böngésző számára, amit online módon is előnyünkre fordíthatunk.
Egy nagyon jól egyszerűsített leírás található meg róla a w3schools oldalán, aki ért angolul, érdemes elolvasni. A lényeg:
Webszerver MIME típus támogatás
Én nginx-szet használok, mert nincs jó kapcsolatom a memóriagyárosokkal, akik az Apache2-t szponzorálják, ezért ahhoz tudok adni biztosan működő leírást, ami végtelenül egyszerű:
Nyissuk meg a /etc/nginx/mime.types fájlt és adjuk hozzá a .manifest kiterjesztést:
text/cache.manifest manifest;
Forráskód módosítása
Szerencsére itt is kevés a tennivaló, a <html> tag-et egészítsük ki a manifest fájl elérési útjával a következőképpen:
<html manifest="page.manifest">
A manifest fájl létrehozása
A manifest fájl tartalmazza azt, hogy mi az amit offline módban is elérhetővé kell tenni, mi az, amit mindenképpen online módon kell elérni. Ahhoz, hogy a kliens oldali appcache-t frissítésre bírjuk, módosítani kell a manifest fájl tartalmát. Amit általában úgy tesznek meg, hogy megjegyzésben ( # karakterrel kezdődő sor) átírják a dátumot.
Figyelem! Az összes mappának tartalmaznia kell ilyen fájlt, ha a <html> tagben relatív URL van! Ez akkor is igaz, ha „baráti” URL-eket használunk, mert a böngésző ott is keresi. Így érdemes pl . manifest="/page.manifest"
formában megadni. Az appcache működése hatással van a dinamikus oldalak kezelésére, ami pl. a PHP-val generált tartalomban is komoly gubancot okozhat, mert a felhasználó a gyorsítóttárazott tartalmat láthatja! Modern böngészőt igényel, csak kváziszabvány, a Mozilla pl. már temeti.
Példa egy page.manifest fájl tartalmára:
CACHE MANIFEST # 2017-02-01:v1 # A fajlok, amik soha nem valtoznak js/jquery.min.js js/jquery.timers.min.js js/jquery.watermark.min.js images/logo.png css/boostrap.min.css # A fajlok, amiket mindig cache nélkül kell elérni # (minden egyeb, ami nincs meghatarozva a korrabiakban) NETWORK: * # Ha az user offline, akkor ezt kell betolteni FALLBACK: / /offline.html # Egyeb gyorsitotarazando fajlok CACHE: #
A legjobb tudomásom szerint nincs lehetőség mappa megadására rekurzívan, ezért minden egyes fájlt fel kell sorolni manuálisan, vagy scripttel generálva.
Törlési kliens oldalon pl. Chrome alatt: chrome://appcache-internals/
A működése a modern böngészők fejlesztőeszközeiben könnyen ellenőrizhető:
Egyéb hasznos linkek:
https://www.sitepoint.com/common-pitfalls-avoid-using-html5-application-cache/
http://alistapart.com/article/application-cache-is-a-douchebag