Автономный кэш приложений HTML5: принудительное обновление всего контента?

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

Манифест выглядит так:

CACHE MANIFEST
#Version: 201209251353

index.html
apple-touch-icon.png
css/styles.css
data/dump.bin
img/background.png
img/sprites.png
js/core.js
js/jquery-1.8.1.min.js
vid/walkthrough.mov

Чтобы «прикоснуться», я добавил комментарий (#Version:), который должен обновляться при каждом изменении содержимого.

Странно, некоторые файлы обновляются. Не все, например, коллега получает последний core.js, но все равно показывает старый walkthrough.mov.

Есть ли простой механизм принудительного обновления всех файлов из кеша?

Я нашел следующий код на SO и включил его в сценарии, ожидая, что он поможет. Не знаю, насколько это нужно :(

    // Application cache refresh
    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);

person Jem    schedule 25.09.2012    source источник


Ответы (2)


Какие заголовки срока действия вы устанавливаете для своего манифеста и контента?

Если вы установили (например) срок действия vid/walkthrough.mov равным одному месяцу в будущем, и этот файл достаточно мал, чтобы поместиться в кеш браузера (примечание: не приложение cache), то браузер обновит кеш приложения из версии в кеше браузера, а не будет снова запрашивать его по сети (если с момента получения файла прошло меньше месяца).

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

person robertc    schedule 25.09.2012
comment
Спасибо! Так достаточно ли просто установить заголовок Expires на 1994 для всех файлов в кэше приложений? Он по-прежнему будет доступен в автономном режиме? - person markasoftware; 25.10.2013

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

person Peter    schedule 02.06.2017