Обработка кэша

Обработка кэша.

Создание или обновление кэша может занять от нескольких секунд до нескольких минут в зависимости от размера загружаемых файлов. Процесс проходит в несколько этапов в соответствии с тем, что браузер в состоянии сделать в каждый момент. При обычном обновлении, например, браузер сначала пытается прочитать файл манифеста, для того чтобы узнать о возможных обновлениях, затем, если обновление было, загрузить все перечисленные в манифесте файлы и в конце проинформировать о завершении процесса. Для информирования о текущем этапе процесса в API предусмотрено свойство status. Оно может принимать следующие значения:

— UNCACHED (значение 0). Указывает, что для данного приложения кэш еще не создан;

— IDLE (значение 1). Указывает, что кэш для приложения актуален и используется;

— CHECKING (значение 2). Указывает, что браузер проверяет обновления;

— DOWNLOADING (значение 3). Указывает, что происходит загрузка файлов кэша;

— UPDATEREADY (значение 4). Указывает, что кэш приложения доступен и используется, но файлы не актуальны; есть готовое обновление для замены устаревших файлов;

— OBSOLETE (значение 5). Указывает, что текущий кэш больше не используется.

Значение свойства status можно проверять в любой момент, но лучше для проверки этапа процесса и состояния кэша использовать события объекта ApplicationCache. Следующие события обычно срабатывают последовательно, и часть из них связана с определенными состояниями кэша приложения:

— checking. Срабатывает, когда браузер проверяет наличие обновлений; О noupdate. Срабатывает, если изменения в файле манифеста не обнаружены;

— downloading. Срабатывает, когда браузер обнаруживает новое обновление и начинает загрузку файлов;

— cached. Срабатывает, когда кэш готов;

— updateready. Срабатывает, когда процесс загрузки обновления завершается;

— obsolete. Срабатывает, когда выясняется, что файл манифеста недоступен и кэш можно удалить.

Следующий пример поможет вам лучше разобраться в процессе. В этом коде при каждом срабатывании события в элемент databox добавляется сообщение со значением события и значением свойства status.

Листинг 16.8. Проверка подключения

Function initiate(){

Databox=document. getElementById(‘databox’);

Cache=window. applicationCache;

Cache. addEventListener(‘checking’, function(){ show(1); }, false); cache. addEventListener(‘downloading’, function(){ show(2); }, false); cache. addEventListener(‘cached’, function(){ show(3); }, false); cache. addEventListener(‘updateready’, function(){ show(4); }, false); cache. addEventListener(‘obsolete’, function(){ show(5); }, false);

Function show(value){

Databox. innerHTML+^^^Состояние: ‘+cache. status; databox. innerHTML+=’ | Событие: ‘+value;

}

Window. addEventListener(‘load’, initiate, false);

Для каждого события мы использовали анонимную функцию. Эти функции отправляют функции show() разные значения, идентифицирующие соответствующее событие. Значение для события и значение свойства status выводятся на экран каждый раз, когда браузер переходит к новому этапу генерации кэша.

Используйте файлы HTML и CSS из предыдущих примеров. Скопируйте код из листинга 16.8 в файл cache. js. Загрузите приложение на свой сервер и посмотрите, как при загрузке документа данные для разных этапов процесса будут отображаться на экране в соответствии со статусом кэша.

Если кэш уже был создан, очень важно выполнить несколько разных действий для очистки кэша и загрузки новой версии. Изменение файла манифеста — это один из этапов, но не единственный. Браузеры сохраняют копии файлов на несколько часов, прежде чем проверять наличие обновлений, поэтому независимо от того, сколько новых комментариев или файлов вы добавите в файл манифеста, в течение какого-то времени браузер все равно будет использовать старую версию кэша. Мы рекомендуем для тестирования примера изменить имена всех файлов. Например, если вы добавите в конце названия номер (скажем, cache2.js), то браузер посчитает ваши файлы новым приложением и создаст новый кэш. Разумеется, так делать можно только в целях тестирования.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *