воскресенье, 27 ноября 2011 г.

AppCache — управляем кэширование вплоть до полного offline!

Браузерное кэширование — совершенно необходимый в современном мире механизм, который ещё менее надежен и предсказуем, чем вышеупомянутые 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, в процессе работы веб приложения может принимать следующие значения:

  1. uncached (страница не имеет записей в кэше приложений. Такой статус будет возвращён и при первой загрузке страницы) 
  2.  idle (нет обновленных версий, в AppCache — самая новая) 2 – checking (идет проверка наличия обновленного файла манифеста) 
  3. downloading (загрузка нового кэша) 
  4. updateready (обновленый кэш готов к использованию) 
  5. 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();
        }
    }

Комментариев нет:

Отправить комментарий