Auto Cache Manifest

Door Johan Dam, 17 jaar geleden, 6.591x bekeken

Yoo

Laat ik met een korte uitleg beginnen voor het geval je niet bekend met met Application Cache,

Met de 'Application Cache' feature is het mogelijk de browser dmv een cache manifest te vertellen welke bestanden jij wilt dat hij in de cache opslaat,
waardoor de website zelfs offline te zien is.

Er is echter 1 groot nadeel, als je een van de bestanden aanpast die in de cache manifest staat maar vergeet om je cache manifest zelf aan te passen,
zal de browser denken dat alles goed is en dus niet de nieuwe pagina ophalen.

Dit script genereert de cache manifest voor je en zal veranderen zodra er iets veranderd is zonder dat jij je daar druk over hoeft te maken.

Hoe gebruik je dit?

Je zet het script ergens neer, past de array met bestanden en uri's aan, en roept het script aan in de html tag

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<html manifest="/cache_manifest.php">


Welke browsers ondersteunen dit?
Alle browsers (Firefox, Safari, Chrome, Opera) behalve Internet Explorer,

Internet explorer negeert de manifest attribute en zal dus niks cachen. (Met uitzondering van de normale cache)

De bijgevoegde JS is ENKEL om te controleren of het allemaal werkt of niet.
Het is af te raden om bijgevoegde javascript ergens anders te gebruiken dan in je test-omgeving,

De JS kan je simpel includen met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<script src="cache_manifest.js" />

Gesponsorde koppelingen

PHP script bestanden

  1. auto_cache_manifest.php
  2. cache_manifest.js

 

Er zijn 4 reacties op 'Auto cache manifest'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Wesley Overdijk
wesley Overdijk
17 jaar geleden
 
0 +1 -0 -1
Dit is nou niet bepaald handig. Allereerst, is hetgeen dat jij als nadeel geeft een probleem aan jou kant. Het is simpelweg kijken naar de laatste aanpassingsdatum, die je ook wel kan vinden toch? Ookal moet het gewoon in IE werken, of je dat nou leuk vind of niet. leuk script, maar niet nuttig.


17 jaar geleden
 
0 +1 -0 -1
Is het niet handiger om gewoon de juiste http headers te versturen?
Jelmer -
Jelmer -
17 jaar geleden
 
0 +1 -0 -1
Het idee achter appcache is dat je ook bestanden die nog niet nodig zijn vast kan cachen, zodat je javascript app die bestanden vast tot z'n beschikking heeft wanneer ze nodig zijn. Handig voor slechte verbindingen (grrr T-Mobile). Check de Spec (working draft).
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Johan Dam
Johan Dam
17 jaar geleden
 
0 +1 -0 -1
Dit hoeft niet in IE te werken, de website moet in IE werken, of je dit nu gebruikt of niet, IE gaat er precies hetzelfde mee om.

HTTP headers versturen helpt, maar is niet ideaal. Het gebeurd me vaak genoeg dat browsers anders reageren dan ik wil als ik ze wil dwingen om iets te cachen (of juist niet), ja hier kan je omheen werken, maar waarom zou je als programmeur moeite doen voor iets wat bijna alle browsers al kennen?
Ander voordeel is dat bij 'normale' cache nog steeds een verzoek gedaan word naar de server voor elk bestand, de cache word (meestal) pas gebruikt als de browser een 304 HTTP Header terug krijgt,
Nu word er alleen maar 1 request gedaan naar het manifest en verder niet (tenzij deze gewijzigd is, dan word alles opnieuw gecached)
Ook is, mits je de goeie bestanden kiest, je website offline beschikbaar, een mooi voorbeeld voor laptops / mobieltjes die van draadloos netwerk afhankelijk zijn.

Tot slot vond ik het handiger om een md5 te pakken ipv de laatste aangepaste tijd omdat in mijn ervaring het wel eens (lees: vaak) voorkomt dat de wijzigingsdatum onterecht veranderd word, is dit heel erg? nee, maar dit is betrouwbaarder.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. auto_cache_manifest.php
  2. cache_manifest.js

Labels

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.