Подтвердить что ты не робот

Определение страницы устарело на страницах github

Страницы Github устанавливают очень агрессивные заголовки кеша (Cache-Control: max-age=86400 1 день, Expires на 1 месяц вперед) для всего обслуживаемого контента.

Если вы обновляете свои страницы и нажимаете на github, люди, пересматривающие страницы, у которых уже есть кешированные копии, не получат новые страницы, фактически не очищая свой кеш браузера.

Как выполнить script на странице, чтобы определить, что она устарела и принудительно обновить?

Этапы могут быть:

  • Определите, что вы работаете на страницах github: просто, разберите window.location для github.com/
  • определить текущую версию страницы: hard, git не позволяет вставлять sha1 на странице; нет RCS $id$. Итак, как вы знаете, какая версия вы?
  • получить текущую версию в github; жесткий, github избавился от не аутентифицированного API v2. И есть время, которое нужно отключить между тем, чтобы подталкивать github и github к публикации. Итак, как вы знаете, какую версию вы могли бы получить?
  • определив, что вы устарели, как сделать недействительным страницу и принудительно перезагрузить? hard, window.location.reload(true) не работает в Safari/Chrome, например...

Итак, его решения - эти шаги; Конечно, может быть другой способ?

4b9b3361

Ответ 1

Чтобы лучше контролировать кеширование вашего сайта, вы можете использовать манифест кэша HTML5. См:

Вы можете использовать window.applicationCache.swapCache() для обновления кэшированной версии вашего сайта без необходимости ручной перезагрузки страницы.

Это пример кода из HTML5 Rocks, в котором объясняется, как обновлять пользователей до последней версии вашего сайта:

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

Чтобы избежать некоторой путаницы, я добавлю, что GitHub устанавливает правильные заголовки HTTP для файлов cache.manifest:

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

чтобы ваш браузер знал, что это манифест кэша, и что он всегда должен быть проверен для новых версий.