Браузерное кэширование — совершенно необходимый в современном мире механизм, который ещё менее надежен и предсказуем, чем вышеупомянутые HTTP cookie. HTML5 предлагает технологию кэширования ресурсов, в которой процесс целиком и полностью контролируем разработчиком. Это кэш приложений (AppCache) и API доступа к нему, позволяющий манипулировать загрузкой ресурсов и доступа к ним, в том числе в отсутствие связи с сервером.
Управление кэшированием в AppCache осуществляется посредством деклараций в файле манифеста. Это - простой текстовый файл, расположенный в месте доступном для веб-приложения. Ниже приведён пример файла-манифеста:
CACHE MANIFEST CACHE: style/default.css images/sound-icon.png images/background.png NETWORK: comm.cgi FALLBACK: main_image.jpg backup_image.jpg
Все ресурсы, перечисленные в секции CACHE, всегда, кроме случаев начальной загрузки или перезагрузки в следствия изменения манифеста, будут загружаться не из сети, а с локального AppCache. Секция NETWORK, напротив, предполагает загрузку только с веб сервера. Запись в секции FALLBACK означает, что при отсутствии доступа рк серверу, вместо ресурса main_image.jpg будет загружен сохраненный в AppCache файл backup_image.jpg.
Как видите все довольно просто.
Связать манифест с html документом, можно указав файл манифеста в качестве атрибута тега html:
<html manifest="main.manifest">
кроме того, необходимо указать веб серверу правильный MIME type манифеста. Например, в случае использования HTTP сервера Apache, это можно сделать добавив в файл .htacces строчку:
AddType text/cache-manifest .manifest
При изменении файла манифеста, данные в AppCache целиком обновляются (загружаются заново).
Для динамического управления процессом кэширования, введён новый DOM объект — window.applicationCache. Основное его свойство applicationCache.status, в процессе работы веб приложения может принимать следующие значения:
Для динамического управления процессом кэширования, введён новый DOM объект — window.applicationCache. Основное его свойство applicationCache.status, в процессе работы веб приложения может принимать следующие значения:
- uncached (страница не имеет записей в кэше приложений. Такой статус будет возвращён и при первой загрузке страницы)
- idle (нет обновленных версий, в AppCache — самая новая) 2 – checking (идет проверка наличия обновленного файла манифеста)
- downloading (загрузка нового кэша)
- updateready (обновленый кэш готов к использованию)
- obsolete (файл манифеста отсутствует — кэш приложений теперь признан устаревшим и полежит удалению)
Переходу в любое из этих состояний, соответствует событие объекта applicationCache, на которым можно назначить обработчики (например onupdateready, onobsolete).
ApplicationCache обладает следующими методами, позволяющими динамически обновлять кэш и контент:
applicationCache.update() - метод, в случае изменения файла манифеста, перегружает кэш приложения, в соответствии с новыми заголовками. При этом веб приложение продолжает использовать старый кэш.
a
pplicationCache.swapCache() - сбрасывает кэш , заставляя приложение использовать ресурсы из обновленного AppCache.
applicationCache.abort() - прерывает связь приложения с AppCache.
Работает все это следующим образом:
function do_update() { cache = window.applicationCache; console.info("Cache updating... " + cache.status); try { cache.update(); cache.swapCache(); } catch (e) { console.error(e); } } function update_cache() { cache = window.applicationCache; cache.addEventListener('updateready', on_cache_ready, false); cache.addEventListener('downloading', on_downloading, false); console.info("Cache status is: " + cache.status); if (cache.status == cache.UPDATEREADY) { do_update(); } }
Комментариев нет:
Отправить комментарий