Ленивая загрузка не HTML-страниц в автономный кеш HTML5 - PullRequest
2 голосов
/ 01 июня 2011

Спецификация автономного веб-приложения HTML5 дает пример того, как лениво загружать страницы HTML в кэш:

CACHE MANIFEST
FALLBACK:
/ /offline.html
NETWORK:
*

Это объясняется в Dive Into HTML5 на примере Википедии: Вы, конечно, не хотите кэшировать всю Википедию при загрузке сайта, но вы хотите, чтобы любая страница, которую посещает пользователь, стала кэшированной.Любая страница, которую пользователь посещает в автономном режиме, должна отображать пользовательскую страницу ошибки.

Хитрость этого подхода заключается в том, что каждая HTML-страница явно включает манифест.Любая страница, содержащая манифест, автоматически включается в кеш, без явного упоминания.Таким образом, этот пример будет загружать HTML-страницы из сети и вставлять их в кеш, а в автономном режиме любая страница в кеше будет работать, и любая некешированная страница будет по умолчанию иметь страницу offline.html.

Проблема в файлах, отличных от HTML, которые не имеют возможности включать манифест.В частности, я пишу игру на JavaScript, и в ней есть куча музыкальных треков.У меня есть следующие требования:

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

Были ли музыкальные файлы HTML, я мог бы использовать описанную выше технику и дать им атрибут manifest=..., чтобы получить их вкеш при первой загрузке.Но они не HTML, поэтому я не могу этого сделать.Есть ли способ получить не-HTML-ресурсы для сохранения в кеш при их загрузке, но не раньше времени?

Примечание. Я не очень знаком с традиционным механизмом кэширования HTTP.Возможно, что его можно использовать вместо этого, но по моему опыту, даже если файлы кэшируются браузером, они не работают, если браузер отключен.Если это возможно, как настроить заголовки кэша?

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Так сказал Dive Into HTML5, но я не смог найти манифест в Википедии.Википедия на самом деле не работает таким образом.В моей консоли Chrome я не смог найти ни одного кеша приложений Википедии.

Я думаю, вы можете попробовать это: Когда пользователь закончит загрузку музыкальной дорожки, отправьте эту информацию на сервер через AJAX.Сервер должен обновить манифест для этого пользователя и поместить в него эту музыкальную дорожку.Затем вы можете позвонить applicationCache.update(), чтобы заставить браузер снова проверить манифест, и он обнаружит обновление.Это означает, что вы не можете использовать статический файл манифеста.Файл манифеста должен быть динамическим и иметь отношение к пользователю.

1 голос
/ 03 июня 2011

Похоже, что у Mozilla есть именно то решение, но оно работает только в Firefox: nsIDOMOfflineResourceList (я не знаю, почему это так называется; эти методы применяются к объекту applicationCache), имеет методы mozAdd и mozRemove, которые позволяют динамически добавлять объекты в кэш с использованием JavaScript.

Надеемся, что это станет частью стандарта (как add и remove);тогда это будет правильным решением этой проблемы.

...