#html #caching #cache-manifest
#HTML #кэширование #кэш-манифест
Вопрос:
Каждый URL-адрес может быть связан с одним манифестом кэша. Но я хочу, чтобы несколько манифестов кэша были связаны с одним и тем же URL-адресом. Вот причина:
Некоторые файлы, которые я хочу кэшировать, редко обновляются и имеют большой размер. Таким образом, каждый раз, когда кэш обновляется, эти большие файлы загружаются повторно, даже если они, возможно, не были изменены. Итак, я хочу разделить кеш. Один кэш для тезисов редко обновляемых больших файлов и другой кэш для часто обновляемых легких файлов.
У вас, ребята, есть идеи, как разделить кэш HTML5?
Ответ №1:
Наиболее эффективный способ:
a) Используйте дату истечения срока действия в далеком будущем (максимальный возраст) для всех ресурсов, упомянутых в разделе КЭША манифеста, и добавьте суффикс временной метки к каждому файлу в разделе КЭША, например:
Кэш: menu_1355817388000.js toolbar_1355817389100.js
б) Когда какой-либо из вышеупомянутых файлов изменяется на сервере, обновите / обновите манифест, чтобы изменить временную метку. В следующий раз будет загружен только файл с измененной меткой времени. Миссия выполнена.
Примечание: дважды перезагрузите страницу в браузере, так как при первом обновлении браузер загружает только манифест и использует старые кэшированные ресурсы для рисования страницы. Это делается для ускорения отображения страницы (есть способы справиться с этой проблемой двойного обновления, но они выходят за рамки вашего вопроса)
Смотрите больше информации в этой длинной, но лучшей статье, которую я когда-либо видел о appcache.
Комментарии:
1. Потрясающая справочная статья. Дал мне гораздо более глубокое понимание. 1 для этого я рекомендую его всем, кто читает это.
2. Есть ли способ восстановить / обновить манифест, чтобы программно изменить временную метку?
3. @KimHonoridez не уверен, что ты имеешь в виду. Стандартная процедура заключается в изменении версии в комментарии в манифесте.
Ответ №2:
Используйте iframe
Манифест кэша вашей страницы будет включать легкие файлы, а манифест кэша iframe, загруженного этой страницей, будет включать большие файлы
В Chrome кэш приложений iframe также будет использоваться для страницы. Я еще не тестировал этот метод в других браузерах.
смотрите живой пример на http://www.timer-tab.com и если вы используете chrome, посмотрите его Разделенный кэш в chrome://appcache-internals/
Ответ №3:
При изменении файла манифеста и повторной загрузке файлов кэша приложения по-прежнему применяются обычные правила кэширования HTTP. Это означает, что если вы установите правильные заголовки кэширования HTTP для этих больших файлов, вы получите 304, чтобы эти файлы не загружались снова. Поэтому нет необходимости разделять кэш приложения.
Ответ №4:
Возможно, ответ, но я бы больше хотел пролить некоторый свет на мои выводы, поскольку я устраняю неполадки в своем собственном веб-приложении.
Я обнаружил, что могу использовать 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 страница. Я обнаружил, что могу получить доступ только к одному или другому кэшу манифестов. Вышеуказанное работает в мобильном Safari, будут кэшироваться носители и изображения, но не обязательно JS или изображения в манифесте фреймворка.
У кого-нибудь есть еще примеры, когда несколько манифестов ссылаются на один URL / страницу?
Ответ №5:
Рабочая группа W3C отказалась от API файловой системы, поэтому его БОЛЬШЕ НЕ СЛЕДУЕТ ИСПОЛЬЗОВАТЬ.
Скорее всего, мы увидим, что он исчезнет в следующей версии Chrome.
Ответ №6:
CACHE MANIFEST
# This is a comment.
# Cache manifest version 0.0.1
# If you change the version number in this comment,
# the cache manifest is no longer byte-for-byte
# identical.
demoimages/mypic.jpg
demoimages/yourpic.jpg
demoimages/ourpic.jpg
sr/scroll.js
NETWORK:
# All URLs that start with the following lines
# are whitelisted.
# whitelisted items are needed to help the site function, you could put regularly
# changing items here
http://example.com/examplepath/
http://www.example.org/otherexamplepath/
CACHE:
# Additional items to cache.
demoimages/allpics.jpg
FALLBACK:
demoimages/currentImg.jpg images/stockImage.jpg`
Комментарии:
1. для автономных возможностей я также хочу кэшировать регулярно изменяющиеся элементы, которые не будут кэшироваться с вашим решением. хотя спасибо
Ответ №7:
Если трюк с Iframe не работает, используйте API файловой системы HTML5
См. http://updates.html5rocks.com/2012/04/Taking-an-Entire-Page-Offline-using-the-HTML5-FileSystem-API
Комментарии:
1. В настоящее время это поддерживается только Google Chrome (чтобы вы не читали всю статью, а потом поняли это — как я сделал).