Обновление кэшированных элементов в кэше приложения HTML5 (Chrome)

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

Я просмотрел учебник в кеше приложения, и он работал хорошо... даже слишком хорошо.

Большинство сценариев в моем приложении объединены и свернуты в процессе развертывания, за исключением jQuery. Для jQuery я использую копию, размещенную в Google.

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

Я изменил его так, чтобы jQuery интегрировался с другими свернутыми скриптами, но у меня все еще была проблема. Я изменил манифест, и, насколько я могу судить, Chrome загрузил обновленный манифест, но не загрузил в нем обновленные ресурсы.

Я даже удалил атрибут manifest из тега HTML, но он все равно не обновлял страницу. Мне пришлось закомментировать /index.html из манифеста, чтобы обновить страницу.

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

Отредактировано для добавления: я провожу тестирование в Chrome (стабильная версия).


person Asmor    schedule 12.09.2011    source источник
comment
Хочу отметить, что я пытался использовать скрипт для проверки window.applicationCache.status и swapCache(), если он готов к ОБНОВЛЕНИЮ. Chrome постоянно зависает на статусе = 1 (кешируется).   -  person Asmor    schedule 13.09.2011
comment
Вы устанавливаете какие-либо заголовки с истекающим сроком действия в своих файлах ресурсов? Я предполагаю, что браузер заполняет кэш приложений из своего сетевого кеша, а не загружает данные с сервера снова.   -  person robertc    schedule 13.09.2011
comment
Понимая, что я не настраивал свой веб-сервер (общий хостинг), я только что проверил в Fiddler, и заголовки кэширования не включены. Тем не менее, браузер кэширует вещи (отправляет заголовки if-modified-since и if-none-match в запросах). Возможно ли, что обновленный манифест может получить кэшированные в сети копии без проверки их актуальности?   -  person Asmor    schedule 13.09.2011


Ответы (1)


Мне удалось заставить его работать, явно установив заголовки кеша только для файла манифеста, чтобы файл манифеста не кэшировался. Я добавил это в свой .htaccess:

<Files ~ "\.mf">
    ExpiresActive On
    ExpiresDefault "access"
</Files>

Обратите внимание, что я использую .mf в качестве расширения файла... Если вы используете .appcache, измените mf на appcache.

person Asmor    schedule 13.09.2011