Спецификация автономного веб-приложения HTML5 дает пример того, как лениво загружать страницы HTML в кэш:
CACHE MANIFEST
FALLBACK:
/ /offline.html
NETWORK:
*
Это объясняется в Dive Into HTML5 на примере Википедии: Вы, конечно, не хотите кэшировать всю Википедию при загрузке сайта, но вы хотите, чтобы любая страница, которую посещает пользователь, стала кэшированной.Любая страница, которую пользователь посещает в автономном режиме, должна отображать пользовательскую страницу ошибки.
Хитрость этого подхода заключается в том, что каждая HTML-страница явно включает манифест.Любая страница, содержащая манифест, автоматически включается в кеш, без явного упоминания.Таким образом, этот пример будет загружать HTML-страницы из сети и вставлять их в кеш, а в автономном режиме любая страница в кеше будет работать, и любая некешированная страница будет по умолчанию иметь страницу offline.html.
Проблема в файлах, отличных от HTML, которые не имеют возможности включать манифест.В частности, я пишу игру на JavaScript, и в ней есть куча музыкальных треков.У меня есть следующие требования:
- Я не хочу, чтобы пользователю приходилось загружать всю музыку при загрузке игры,
- Если пользователь встречает новую музыкальную дорожку во время онлайн, эта дорожка должна быть загружена и кэширована,
- Если пользователь встречает новую музыкальную дорожку в автономном режиме, не имеет значения, слышат ли они тишину.
- Если пользователь встречает музыкальную дорожку, котораяони уже слышали в автономном режиме, его следует воспроизводить из кеша.
Были ли музыкальные файлы HTML, я мог бы использовать описанную выше технику и дать им атрибут manifest=...
, чтобы получить их вкеш при первой загрузке.Но они не HTML, поэтому я не могу этого сделать.Есть ли способ получить не-HTML-ресурсы для сохранения в кеш при их загрузке, но не раньше времени?
Примечание. Я не очень знаком с традиционным механизмом кэширования HTTP.Возможно, что его можно использовать вместо этого, но по моему опыту, даже если файлы кэшируются браузером, они не работают, если браузер отключен.Если это возможно, как настроить заголовки кэша?