Статьи

Кэш приложений HTML5

Кэширование доступно в двух вариантах: кэширование данных и кэширование приложений.

В HTML5 кэширование данных может осуществляться с помощью веб-хранилища , indexedDB и т. Д.

Кэширование приложения позволяет веб-приложению хранить свои ресурсы, такие как HTML, CSS, изображения, страницы JavaScript и т. Д., В браузере, что позволяет сделать приложение полностью или частично доступным в автономном режиме или при недоступности подключения к Интернету.

Файл манифеста

Кэширование приложения может быть выполнено с помощью файла манифеста кэша. Файл манифеста определяет список ресурсов, которые должны быть кэшированы в браузере.

Разделы в файле манифеста

CACHE MANIFEST: первая строка файла манифеста должна начинаться с ключевого слова CACHE MANIFEST.

CACHE MANIFEST
# 2010-02-08:v2
index.html
images/profile.JPG
css/main.css

Список ресурсов, подлежащих кэшированию, должен быть указан под разделом CACHE MANIFEST.

Не забудьте кэшировать изображения и файлы CSS, связанные с определенной веб-страницей.

В приведенном выше примере index.html, изображение профиля и файл main.css — это ресурсы, которые должны кэшироваться браузером.

Строка, начинающаяся с символа #, обозначает комментарий.

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

 FALLBACK
/html /offline.html

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

 /index.html /offline.html

Указывает, что браузер должен отображать offline.html вместо index.html в автономном режиме, если index.html не кэшируется

 / /offline.html

Указывает, что всякий раз, когда пользователь находится в автономном режиме, все некэшированные файлы в корневой папке будут заменены на offline.html.

СЕТЬ: Ресурсы, доступ к которым возможен только в режиме онлайн и которые никогда не должны кэшироваться, перечислены в этом разделе.

 NETWORK
/sample.php

В приведенном выше примере указано, что sample.php доступен только во время онлайн

 NETWORK
*

Звездочка в разделе сети указывает, что все ресурсы, кроме тех, которые упомянуты в разделе CACHE MANIFEST, доступны только в режиме онлайн.

Образец файла

 CACHE MANIFEST
# 2010-02-08:v12

CACHE:
index.html
images/IMG_1713.JPG
css/main.css

# Require the user to be online.
NETWORK:

*

# offline.html will be served in place of all other .html files
FALLBACK:
/index.html /offline.html

Ссылка на файл манифеста

Как только файл манифеста подготовлен, на него следует ссылаться с веб-страницы, которую вы хотите кэшировать, используя атрибут manifest в теге html, как указано ниже.

 <!DOCTYPE html>
<html manifest="developer.appcache">
Page to be cached goes here

</html>

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

Очистка кеша

Кэш будет оставаться неизменным до тех пор, пока не произойдет одно из следующих действий.
• Кэш браузера очищается пользователем.
• Кэшируемые ресурсы обновляются. Обратите внимание, что обновление ресурсов в файле манифеста не позволит браузеру автоматически повторно кэшировать файл. Файл манифеста должен быть изменен. Хотите знать, что изменить в файле манифеста, если нет изменений в списке ресурсов для кэширования? Просто добавьте комментарий к версии и продолжайте изменять номер версии по мере изменения ресурсов. Этого должно быть достаточно.
• Изменить в файле манифеста.
• Кэш приложения обновляется программно.

Кеш события

Доступ к кэшу приложения можно получить программным способом, используя объект окна.

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

 window.applicationCache.status.

Когда браузер впервые посещает веб-страницу, содержащую атрибут manifest, происходят следующие события.
• Проверка: происходит, когда браузер посещает веб-страницу и читает атрибут манифеста на элемент.
• Загрузка: происходит, когда браузер начинает загрузку ресурсов в файле манифеста.
• Ход выполнения. Предоставляет информацию о том, сколько файлов загружено и сколько файлов еще не загружено.
• Кэшируется: происходит, когда все ресурсы в файле манифеста загружены и приложение готово к использованию в автономном режиме.

Если браузер уже посетил веб-страницу и может распознать файл манифеста, могут произойти следующие события
• Без обновления: происходит, когда нет изменений в файле манифеста.
• Загрузка: происходит при изменении файла манифеста кэша и ресурсов, перечисленных в файле. Браузер начинает загрузку ресурсов.
• Ход выполнения. Предоставляет информацию о том, сколько файлов загружено и сколько файлов еще не загружено.
• Update Ready — происходит, когда ресурсы в файле манифеста снова загружаются для изменений, а новое приложение готово для использования в автономном режиме.

Событие ошибки происходит в следующих сценариях
• Файл манифеста был размером 404 или 410 страниц, поэтому кэширование прекращено
• Файл манифеста кэша изменяется во время выполнения обновления.
• Произошла ошибка при загрузке ресурсов, перечисленных в файле манифеста.
• Файл манифеста не изменился, но страница, ссылающаяся на манифест, не была загружена должным образом

Если файл манифеста приложения удаляется с сервера, браузер удаляет все кэшированные ресурсы, которые используют этот манифест, и отправляет «устаревшее» событие объекту applicationCache.

Обновление кэша:

Вы можете программно проверить, есть ли у приложения обновленный файл манифеста кэша, прослушивая событие updateready объекта кэша приложения. Когда кэш приложения находится в состоянии updatedready, используйте функцию кэш-памяти подкачки для замены старого файла манифеста на новый и перезагрузите окно, чтобы перезагрузить ресурсы, которые были изменены в файле манифеста.

 function onUpdateReady() {
if(window.applicationCache.status === window.applicationCache.UPDATEREADY) {
        		window.applicationCache.swapCache();
        		location.reload();

}
}
window.applicationCache.addEventListener('updateready', onUpdateReady);

Вывод:

Функция кэширования приложений раскрыла реальный потенциал HTML5, предоставляя возможность просмотра в автономном режиме, ускорения извлечения ресурсов, хранящихся в кэше, и снижения нагрузки на сервер.