SlideShare a Scribd company logo
Cache manifest
на практике
Головин Дмитрий
dgolovin@andiks.com
24.09.2015
2. Пролог
Cache manifest - предварительная
загрузка статических ресурсов и
работа в offline с возможностью
отследить прогресс.
3. Назначение
++ веб приложения “с логикой”,
которые могут работать в offline
+ обычные веб приложения, в
которых много общих статических
ресурсов
4. Пример
В нашей системе надо гарантировать
предварительную загрузку большого
количества ресурсов на клиент. Для этого
используем манифест.
5. Что манифест не делает
● Манифест не заменяет обычную схему
кэширования!
● Усложняется кэширование: надо менять
манифест!
6. Базовая конфигурация
<!DOCTYPE html>
<html lang="en" manifest="cache.manifest">
CACHE MANIFEST
CACHE:
file1.js
file2.css
NETWORK:
http://*
https://*
*
SETTINGS:
# fast
prefer-online
# hash
# file : cache.manifect
# Content-Type: text/cache-manifest
7. Конфигурация Offline
CACHE MANIFEST
...
FALLBACK:
/ fallback.html
/imgs/ default.png
Существует проблема с определением offline!
# если браузер поймёт, что вы в offline
# то он переадресует все запросы
# к / на fallback.html
# и запросы к /imgs/ на default.png
8. Контроль cache manifest
// подписка на события
applicationCache. addEventListener('%event%',function(e){...} );
// отслеживание статуса
switch (applicationCache. status) {...}
9. Диаграмма нормальной работы
CHECKING
DOWNLOADING
IDLE
UPDATEREADY
downloading
progress
cached(1)
updateready(2)
noupdate(2)checking
10. Cобытие progress
● считаем статистику загруженных через
e.loaded/e.total, если доступен
e.lengthComputable
● или считаем количество событий - loaded,
а total из содержимого манифеста
(hate firefox)
11. Успешная загрузка манифеста
● события noupdate, cached или
состояние IDLE - загрузились, всё ОК!
● событие updateready
или состояние UPDATEREADY
○ applicationCache.swapCache()
○ location.reload()
12. Диаграмма исключений
CHECKING
DOWNLOADING
OBSOLETE
UNCACHED
obsolete
errorerror
13. Событие error
● событие error - произошла ошибка,
обработайте и reload()
○ можно попробовать определить квоту
○ имеет смысл сохранять даты ошибок
локально, чтобы при накоплении
определённого максимума за период
отключать манифест
// но причин вы так и не узнаете
14. События и статусы исключений
● событие obsolete и/или состояние
OBSOLETE
○ неведомая ошибка “манифест удалён”
(статусы: 404 и 410) Не допускайте её!
Используется старый манифест.
○ alert(“manifest not found”)
● состояние UNCACHED
○ игнор, если нет html[manifest]
○ иначе обработать как error
15. Общая диаграмма состояний
CHECKING DOWNLOADING
IDLE
UPDATEREADY
OBSOLETE
UNCACHED
downloading
progress cached(1)
updateready(2)
obsolete
error
noupdate(2)
error
checking
16. Обновление manifest online
// позволяет отслеживать изменения
setInterval(function() {
applicationCache.update();
}, 60*60*1000);
17. О подписке на события
Firefox:
● подписка только через
addEventListener
● иногда события теряются, надо следить
за состоянием
Chrome:
● иногда виснет в состоянии CHECKING,
надо расценивать как error
18. Меры предосторожности
● не плодите манифесты, иначе они выжрут
всю квоту/место на диске
● аккуратнее с бизнес логикой (chrome
запрашивает старую страницу-источник)
● статика из CACHE: обновляется только
при изменении самого манифеста
19. Отладка и управление
● console.log =)
● Chrome
○ chrome://appcache-internals/
○ Dev. tools -> Resources -> Application Cache
● Firefox
○ Preferences -> Advanced ->Offline...
20. Итог
● хорошая оптимизация предзагрузки
● незаменим для оффлайн приложений
● усложнение кеширования и поддержки
Всем спасибо.
С вами была компания Andiks LTD
Вы можете связаться с нами:
info@andiks.com
У нас есть открытые вакансии:
● Java developer
● WebGL developer
● Front-end developer
● Game designer
● UI/UX designer
● Functional analyst
Присылайте ваши резюме.

More Related Content

PDF
Актуальные технологии и тренды в веб-разработке
PDF
The Old New ASP.NET
PDF
бэкап баз данных Oracle c помощью handy backup, март 2014
PPT
Воюем за ресурсы (ZFConf2011)
PDF
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
PDF
2013 09 19 кеширование на клиенте и сервере
PPT
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
Актуальные технологии и тренды в веб-разработке
The Old New ASP.NET
бэкап баз данных Oracle c помощью handy backup, март 2014
Воюем за ресурсы (ZFConf2011)
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
2013 09 19 кеширование на клиенте и сервере
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...

Similar to "HTML5 Cache Manifest на практике", Дмитрий Головин, MoscowJS 25 (20)

PPTX
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
PPTX
Использование Open Source инструментов для автоматизации тестирования
PPTX
Vagrant puppet
PDF
Jiramania презентации @augspb
PPTX
Cтандартизация рабочего окружения и автоматизация развертывания рабочей среды
PPTX
Процесс разработки и тестирования с Docker + gitlab ci
PPTX
Silverlight 4, есть ли жизнь на десктопе?
PPTX
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
PPTX
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
PPTX
Разработка WinRT приложений для Windows 8: реальный опыт, UA Mobile 2012
PDF
Инструментируй это
PPTX
Асинхронность и сопрограммы
PDF
Phalcon. Что нового?
PPTX
Maven 3 : уличная магия
PDF
Технология плоского_прямого резервного копирования
PPTX
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
PDF
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.
PDF
Михаил Галушко - Разработка WinRT приложений для Windows 8: реальный опыт
PDF
Приемы Сontinuous Integration при разработке приложений на Caché
PDF
Caché github continuous intergration
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
Использование Open Source инструментов для автоматизации тестирования
Vagrant puppet
Jiramania презентации @augspb
Cтандартизация рабочего окружения и автоматизация развертывания рабочей среды
Процесс разработки и тестирования с Docker + gitlab ci
Silverlight 4, есть ли жизнь на десктопе?
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
Разработка WinRT приложений для Windows 8: реальный опыт, UA Mobile 2012
Инструментируй это
Асинхронность и сопрограммы
Phalcon. Что нового?
Maven 3 : уличная магия
Технология плоского_прямого резервного копирования
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.
Михаил Галушко - Разработка WinRT приложений для Windows 8: реальный опыт
Приемы Сontinuous Integration при разработке приложений на Caché
Caché github continuous intergration
Ad

More from MoscowJS (20)

PDF
Александр Русаков - TypeScript 2 in action
PDF
Виктор Розаев - Как не сломать обратную совместимость в Public API
PDF
Favicon на стероидах
PDF
E2E-тестирование мобильных приложений
PDF
Reliable DOM testing with browser-monkey
PDF
Basis.js - Production Ready SPA Framework
PDF
Контекст в React, Николай Надоричев, MoscowJS 31
PDF
Верстка Canvas, Алексей Охрименко, MoscowJS 31
PDF
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
PDF
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
PDF
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
PDF
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
PDF
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
PDF
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
PDF
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
PDF
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
PDF
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
PDF
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
PDF
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
PDF
"Доклад не про React", Антон Виноградов, MoscowJS 27
Александр Русаков - TypeScript 2 in action
Виктор Розаев - Как не сломать обратную совместимость в Public API
Favicon на стероидах
E2E-тестирование мобильных приложений
Reliable DOM testing with browser-monkey
Basis.js - Production Ready SPA Framework
Контекст в React, Николай Надоричев, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
"Доклад не про React", Антон Виноградов, MoscowJS 27
Ad

"HTML5 Cache Manifest на практике", Дмитрий Головин, MoscowJS 25

  • 1. Cache manifest на практике Головин Дмитрий dgolovin@andiks.com 24.09.2015
  • 2. 2. Пролог Cache manifest - предварительная загрузка статических ресурсов и работа в offline с возможностью отследить прогресс.
  • 3. 3. Назначение ++ веб приложения “с логикой”, которые могут работать в offline + обычные веб приложения, в которых много общих статических ресурсов
  • 4. 4. Пример В нашей системе надо гарантировать предварительную загрузку большого количества ресурсов на клиент. Для этого используем манифест.
  • 5. 5. Что манифест не делает ● Манифест не заменяет обычную схему кэширования! ● Усложняется кэширование: надо менять манифест!
  • 6. 6. Базовая конфигурация <!DOCTYPE html> <html lang="en" manifest="cache.manifest"> CACHE MANIFEST CACHE: file1.js file2.css NETWORK: http://* https://* * SETTINGS: # fast prefer-online # hash # file : cache.manifect # Content-Type: text/cache-manifest
  • 7. 7. Конфигурация Offline CACHE MANIFEST ... FALLBACK: / fallback.html /imgs/ default.png Существует проблема с определением offline! # если браузер поймёт, что вы в offline # то он переадресует все запросы # к / на fallback.html # и запросы к /imgs/ на default.png
  • 8. 8. Контроль cache manifest // подписка на события applicationCache. addEventListener('%event%',function(e){...} ); // отслеживание статуса switch (applicationCache. status) {...}
  • 9. 9. Диаграмма нормальной работы CHECKING DOWNLOADING IDLE UPDATEREADY downloading progress cached(1) updateready(2) noupdate(2)checking
  • 10. 10. Cобытие progress ● считаем статистику загруженных через e.loaded/e.total, если доступен e.lengthComputable ● или считаем количество событий - loaded, а total из содержимого манифеста (hate firefox)
  • 11. 11. Успешная загрузка манифеста ● события noupdate, cached или состояние IDLE - загрузились, всё ОК! ● событие updateready или состояние UPDATEREADY ○ applicationCache.swapCache() ○ location.reload()
  • 13. 13. Событие error ● событие error - произошла ошибка, обработайте и reload() ○ можно попробовать определить квоту ○ имеет смысл сохранять даты ошибок локально, чтобы при накоплении определённого максимума за период отключать манифест // но причин вы так и не узнаете
  • 14. 14. События и статусы исключений ● событие obsolete и/или состояние OBSOLETE ○ неведомая ошибка “манифест удалён” (статусы: 404 и 410) Не допускайте её! Используется старый манифест. ○ alert(“manifest not found”) ● состояние UNCACHED ○ игнор, если нет html[manifest] ○ иначе обработать как error
  • 15. 15. Общая диаграмма состояний CHECKING DOWNLOADING IDLE UPDATEREADY OBSOLETE UNCACHED downloading progress cached(1) updateready(2) obsolete error noupdate(2) error checking
  • 16. 16. Обновление manifest online // позволяет отслеживать изменения setInterval(function() { applicationCache.update(); }, 60*60*1000);
  • 17. 17. О подписке на события Firefox: ● подписка только через addEventListener ● иногда события теряются, надо следить за состоянием Chrome: ● иногда виснет в состоянии CHECKING, надо расценивать как error
  • 18. 18. Меры предосторожности ● не плодите манифесты, иначе они выжрут всю квоту/место на диске ● аккуратнее с бизнес логикой (chrome запрашивает старую страницу-источник) ● статика из CACHE: обновляется только при изменении самого манифеста
  • 19. 19. Отладка и управление ● console.log =) ● Chrome ○ chrome://appcache-internals/ ○ Dev. tools -> Resources -> Application Cache ● Firefox ○ Preferences -> Advanced ->Offline...
  • 20. 20. Итог ● хорошая оптимизация предзагрузки ● незаменим для оффлайн приложений ● усложнение кеширования и поддержки
  • 21. Всем спасибо. С вами была компания Andiks LTD Вы можете связаться с нами: info@andiks.com У нас есть открытые вакансии: ● Java developer ● WebGL developer ● Front-end developer ● Game designer ● UI/UX designer ● Functional analyst Присылайте ваши резюме.