Как хорошо вы знаете Service Worker API? А способы применения его для кэширования данных? В этом рассказе мы постараемся понять, как Service Worker может взаимодействовать с запросами, что и как кэшировать, а также как все это поможет нашим с вами сайтам загружаться значительно быстрее.
15. 15
План действий
1. Кэшируем файлы у клиента
2. При запросе к этим файлам - отдать их из кэша
3. При отсутствии интернета - перевести клиента на оффлайн режим
4. При обновлении сборки, обновлять файлы в кэше
16. 16
Придумываем имя для нашего хранилища
const CACHE_NAME = '0.1.0';
const CACHE_FILES = [
'/offline/index.html',
'/offline/offline.css',
'/offline/vendors.js',
'/offline/offline.js',
'/offline/offline.sprite.svg',
'/offline/fonts/pt_sans-regular.woff2',
'/offline/fonts/pt_serif-regular.woff2'
];
17. 17
Кладем список файлов для кэширования в массив
const CACHE_NAME = '0.1.0';
const CACHE_FILES = [
'/offline/index.html',
'/offline/offline.css',
'/offline/vendors.js',
'/offline/offline.js',
'/offline/offline.sprite.svg',
'/offline/fonts/pt_sans-regular.woff2',
'/offline/fonts/pt_serif-regular.woff2'
];
34. 34
План действий
• Определяем, какие файлы будем кэшировать
• Ловим запросы, находим совпадения в URL
• Если запрос к нужному нам файлу - обрабатываем его
• Ищем запрос в кэше, если находим - отдаем клиенту
• Если в кэше нет - выполняем запрос
• Полученный ответ отправляем в кэш
• После - отправляем этот ответ клиенту
59. 59
Инструменты для работы с Service Worker API
• - https://workboxjs.org/
• sw-precache -https://github.com/GoogleChromeLabs/sw-precache
• sw-toolbox -https://googlechromelabs.github.io/sw-toolbox/
• Webpack offline-plugin -https://github.com/NekR/offline-plugin
61. 61
Требования и поддержка
• Забудьте об IE и Safari, Android 5.0 <
• Самая нижняя планка - Chrome 45(Сентябрь 2015)
• В результате: меньше размер кода, меньше костылей
62. 62
Фильтрация запросов внутри события fetch
Проблема: SW ловит запросы ко всем сайтам
В результате:
• Может ошибочно выдать файл из хранилища
• Засоряет вкладу Network в Dev Tools
63. 63
Создание черных и белых листов доменов
Whitelist - домены, запросы к которым SW будет обрабатывать
Blacklist - ограничение для поддоменов
const HOST_WHITELIST = [
"localhost",
"lenta.ru"
];
const HOST_BLACKLIST = [
"api",
"icdn"
];
function isSWRequest(url) {
const checkWhiteHost = HOST_WHITELIST.find(function(host) {
return url.host.indexOf(host) > -1;
});
const checkBlackHost = HOST_BLACKLIST.find(function(host) {
return url.host.indexOf(host) > -1;
});
return checkWhiteHost && !checkBlackHost;
}
70. 70
Полезные ссылки по теме:
• The offline cookbook - Jace Archibald -https://jakearchibald.com/2014/offline-cookbook/
• Репозиторий со ссылками на множество материалов по PWA - https://github.com/hemanth/
awesome-pwa
• Множество разборов кейсов использования Service Worker API - https://serviceworke.rs/
• Перевод статьи Making A Service Worker: A Case Study на Прогрессоре - http://prgssr.ru/
development/sozdaem-service-worker.html
71. 71
Ссылки на материалы:
• https://goo.gl/AgZx6f - Код статического метода кэширования
• https://goo.gl/JJoeom - Код динамического метода кэширования
• https://yadi.sk/d/w4IOFx233P7hPc - ссылка на презентацию
72. Даньшин Артем
Старший инженер-разработчик клиентских приложений
Контакты:
Github: https://github.com/ArtDanshin
В контакте: https://vk.com/artdanshin
Спасибо за внимание