41 votes

Déterminer qu'une page est obsolète sur les pages github

Github pages de jeux très agressive en-têtes de cache (Cache-Control: max-age=86400 1 jour, Expires 1 mois à l'avance) sur tous les contenus.

Si vous mettez à jour vos pages et de les pousser à github, les gens revisiter les pages qui ont déjà obtenu les copies mises en cache ne sera pas obtenir les nouvelles pages sans réellement le nettoyage de leur cache du navigateur.

Comment un script qui s'exécute dans une page de déterminer qu'il s'est rassis et de forcer une mise à jour?

Les étapes peuvent être:

  1. vous êtes en cours d'exécution sur github pages: facile, parse window.location pour github.com/
  2. déterminer la version actuelle de la page: dur, git ne les laissez pas vous intégrez le sha1 dans un engage la page; pas de RCS $id$. Alors, comment savez-vous quelle version vous?
  3. obtenir la version actuelle dans github; dur, github se débarrasser de non-authentifié API v2. Et il y a une déconnexion entre les poussant à github et github se déplacer à la publication de trop. Alors, comment savez-vous quelle est la version que vous pourriez obtenir?
  4. après avoir déterminé que vous êtes rassis, comment faire invalider une page et de la force de la recharger? dur, window.location.reload(true) ne fonctionne pas sous Safari/Chrome, par exemple...

Afin de résoudre ses-ces-étapes; il peut bien sûr y avoir un autre moyen?

37voto

rsp Points 11526

Pour avoir un meilleur contrôle de la mise en cache de votre site web, vous pouvez utiliser le HTML5 manifeste de cache. Voir:

Vous pouvez utiliser l' window.applicationCache.swapCache() de la mise à jour de la version en cache de votre site web sans la nécessité d'manuellement le rechargement de la page.

C'est un exemple de code à partir de HTML5 Rocks expliquant comment mettre à jour les utilisateurs de la version la plus récente de votre site:

// 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);

Pour éviter la confusion, je vais ajouter que GitHub jeux de le corriger en-têtes HTTP pour le cache.les fichiers manifest:

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

si votre navigateur sait que c'est un manifeste de cache et qu'il doit toujours être vérifiée pour les nouvelles versions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X