Кэш HTML5 Возможно ли иметь несколько разных кешей для одного URL-адреса?

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

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

Ребята, вы знаете, как разделить кеш HTML5?


person brillout    schedule 20.10.2011    source источник


Ответы (7)


Самый эффективный способ:

a) Используйте дату истечения срока действия в далеком будущем (max-age) для всех ресурсов, упомянутых в разделе CACHE манифеста, и добавьте суффикс метки времени к каждому файлу в разделе CACHE, например:

CACHE:
menu_1355817388000.js
toolbar_1355817389100.js

б) Когда любой из вышеперечисленных файлов изменяется на сервере, обновите/обновите манифест, чтобы изменить метку времени. В следующий раз будет загружен только файл с измененной отметкой времени. Миссия выполнена.

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

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

person Gene Vayngrib    schedule 20.12.2012
comment
Потрясающая справочная статья. Дал мне много более глубокого понимания. +1 за это, рекомендую всем, кто это читает. - person Kiruse; 01.03.2013
comment
Есть ли способ регенерировать/обновить манифест, чтобы программно изменить метку времени? - person Kim Honoridez; 18.02.2015
comment
@KimHonoridez не уверен, что ты имеешь в виду. Стандартная процедура заключается в изменении версии в комментарии в манифесте. - person Gene Vayngrib; 19.02.2015

Используйте iframe

Манифест кеша вашей страницы будет включать легкие файлы, а манифест кеша iframe, загруженного этой страницей, будет включать большие файлы.

В хроме кеш приложения iframe также будет использоваться для страницы. Я еще не тестировал этот метод в других браузерах.

см. живой пример на http://www.timer-tab.com, а если вы используете chrome, см. его разделенный кеш в chrome://appcache-internals/

person brillout    schedule 15.11.2011

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

person michielve    schedule 22.07.2012

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

Я обнаружил, что могу использовать 2 iframe (manifest_framework) и (manifest_media) для загрузки манифестов, но я до сих пор не совсем понимаю, как они нацелены, но у меня был ограниченный успех.

manifest_framework:

CACHE MANIFEST

CACHE:
appdata.ini
dialog.png
jquery.min.js
login.htm
login.js
manifest.appcache.js

NETWORK:
*

FALLBACK:

manifest_media:

CACHE MANIFEST

CACHE:
manifest_fwk.php
od/audio_track_1_1.m4a
od/audio_track_1_2.m4a
od/audio_track_1_3.m4a
od/audio_track_1_4.m4a
od/video_1.mp4
od/video_2.mp4
od/video_3.mp4

NETWORK:
*

FALLBACK:
./ webapp.php

./index.php — это «целевая страница», которая сама по себе не кэшируется, но возвращается к webapp.php в автономном режиме.

Чего я не понимаю, так это того, как они ссылаются на страницу webapp.php. Я обнаружил, что могу получить доступ только к одному или другому кешу манифестов. Вышеупомянутое работает в мобильном сафари, мультимедиа будет кэшироваться, а изображение, но не обязательно JS или изображения в манифесте фреймворка.

У кого-нибудь есть еще примеры, когда несколько манифестов ссылаются на один URL/страницу?

person vivvvi    schedule 14.07.2014

Рабочая группа W3C отказалась от API файловой системы, поэтому ее НЕ ДОЛЖНО БОЛЬШЕ ИСПОЛЬЗОВАТЬ.

Скорее всего, мы увидим, что он упадет со следующей версии Chrome.

http://www.w3.org/TR/file-system-api/

person vivvvi    schedule 31.08.2014

Если трюк с Iframe не работает, используйте API файловой системы HTML5.

См. http://updates.html5rocks.com/2012/04/Taking-an-Entire-Page-Offline-using-the-HTML5-FileSystem-API

person brillout    schedule 29.04.2012
comment
В настоящее время это поддерживается только Google Chrome (чтобы избавить вас от чтения всей статьи только для того, чтобы потом понять это - как я). - person Sam Sehnert; 30.11.2012

person    schedule
comment
для автономных возможностей я также хочу кэшировать регулярно меняющиеся элементы, которые не будут кэшироваться с вашим решением. Спасибо хоть - person brillout; 21.10.2011