Создание или обновление кэша может занять от нескольких секунд до нескольких минут в зависимости от размера загружаемых файлов. Процесс проходит в несколько этапов в соответствии с тем, что браузер в состоянии сделать в каждый момент. При обычном обновлении, например, браузер сначала пытается прочитать файл манифеста, для того чтобы узнать о возможных обновлениях, затем, если обновление было, загрузить все перечисленные в манифесте файлы и в конце проинформировать о завершении процесса. Для информирования о текущем этапе процесса в 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), то браузер посчитает ваши файлы новым приложением и создаст новый кэш. Разумеется, так делать можно только в целях тестирования.
Добавить комментарий