SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
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
Присылайте ваши резюме.

Weitere ähnliche Inhalte

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

Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...Egor Konovalov
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspbGonchik Tsymzhitov
 
Cтандартизация рабочего окружения и автоматизация развертывания рабочей среды
Cтандартизация рабочего окружения и автоматизация развертывания рабочей средыCтандартизация рабочего окружения и автоматизация развертывания рабочей среды
Cтандартизация рабочего окружения и автоматизация развертывания рабочей средыWordCamp Kyiv
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Eugene Zharkov
 
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''DneprCiklumEvents
 
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"
Михаил Гaлушко "Разработка для WinRT: практика создания качественных приложений"Dmitry Savchenko
 
Разработка WinRT приложений для Windows 8: реальный опыт, UA Mobile 2012
Разработка WinRT приложений для  Windows 8: реальный опыт, UA Mobile 2012Разработка WinRT приложений для  Windows 8: реальный опыт, UA Mobile 2012
Разработка WinRT приложений для Windows 8: реальный опыт, UA Mobile 2012Mykhail Galushko
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммыPlatonov Sergey
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?Oleksandr Torosh
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магияAleksey Solntsev
 
Технология плоского_прямого резервного копирования
Технология плоского_прямого резервного копированияТехнология плоского_прямого резервного копирования
Технология плоского_прямого резервного копированияАльбина Минуллина
 
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
Windbg: когда у нас не воспроизводится. Александр Головач ➠  CoreHard Autumn ...Windbg: когда у нас не воспроизводится. Александр Головач ➠  CoreHard Autumn ...
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...corehard_by
 
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.Омские ИТ-субботники
 
Михаил Галушко - Разработка WinRT приложений для Windows 8: реальный опыт
Михаил Галушко -  Разработка WinRT приложений для Windows 8: реальный опытМихаил Галушко -  Разработка WinRT приложений для Windows 8: реальный опыт
Михаил Галушко - Разработка WinRT приложений для Windows 8: реальный опытUA Mobile
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéInterSystems CEE
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergrationInterSystems
 

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

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

Mehr von MoscowJS

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

Mehr von MoscowJS (20)

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

"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 Присылайте ваши резюме.