Determinare una pagina è obsoleto nelle pagine di github

Le pagine Github impostano le intestazioni della cache molto aggressive ( Cache-Control: max-age=86400 1 giorno, Expires 1 mese prima) su tutti i contenuti pubblicati.

Se aggiorni le tue pagine e fai clic su Github, le persone che rivisitano le pagine che hanno già copie in cache non otterranno le nuove pagine senza effettivamente pulire la cache del browser.

Come può uno script in esecuzione in una pagina determinare che è obsoleto e imporre un aggiornamento?

I passaggi potrebbero essere:

  1. Determina l’esecuzione su pagine github: facile , analizza window.location per github.com/
  2. determinare la versione attuale della pagina: difficile , git non ti permette di incorporare lo sha1 in una pagina impegnata; no $id$ RCS. Allora, come fai a sapere di quale versione sei?
  3. ottenere la versione corrente in github; difficile , github si è sbarazzato dell’API v2 non autenticata. E c’è un momento di disconnessione tra la spinta a github e il github che passa anche alla pubblicazione. Quindi, come fai a sapere quale versione potresti ottenere?
  4. avendo stabilito che sei obsoleto, come invalidare una pagina e forzare la ricarica? difficile , window.location.reload(true) non funziona in Safari / Chrome, ad esempio …

Quindi i suoi risolvere-questi-passi; certo che ci può essere un altro modo?

Per avere un controllo migliore della memorizzazione nella cache del tuo sito web puoi utilizzare il manifest della cache HTML5. Vedere:

  • Guida per principianti sull’utilizzo della cache dell’applicazione su rocce HTML5
  • Utilizzo della cache dell’applicazione su Mozilla Developer Network
  • Cache manifest in HTML5 su Wikipedia
  • Nota per il gruppo di lavoro W3C delle applicazioni Web offline
  • Applicazioni Web offline a WHATWG

Puoi usare window.applicationCache.swapCache() per aggiornare la versione cache del tuo sito web senza la necessità di ricaricare manualmente la pagina.

Questo è un esempio di codice da Rocks HTML5 che spiega come aggiornare gli utenti alla versione più recente del tuo sito:

 // Check if a new cache is available on page load. window.addEventListener('load', function(e) { window.applicationCache.addEventListener('updateready', function(e) { if (window.applicationCache.status == window.applicationCache.UPDATEREADY) { // Browser downloaded a new app cache. // Swap it in and reload the page to get the new hotness. window.applicationCache.swapCache(); if (confirm('A new version of this site is available. Load it?')) { window.location.reload(); } } else { // Manifest didn't changed. Nothing new to server. } }, false); }, false); 

Per evitare un po ‘di confusione, aggiungerò che GitHub imposta le intestazioni HTTP corrette per i file cache.manifest:

 Content-Type: text/cache-manifest Cache-Control: max-age=0 Expires: [CURRENT TIME] 

quindi il tuo browser sa che è un manifest di cache e che dovrebbe sempre essere controllato per le nuove versioni.