Web Worker и Service Worker: в чём разница
Вопрос
Чем Web Worker отличается от Service Worker и когда что использовать?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Оба работают в отдельном потоке и не имеют доступа к DOM
Web Worker создаётся страницей и живёт вместе с ней, нужен для тяжёлых вычислений
Service Worker живёт независимо от вкладки и перехватывает сетевые запросы своего scope
Service Worker нужен для офлайна, кеширования, push и фоновой синхронизации, требует HTTPS
Общение через postMessage, данные копируются structured clone
У Service Worker жизненный цикл install, waiting, activate
Что могут спросить следом
- Почему новая версия SW не применяется сразу и как это ускорить?
- Как передать в воркер большой бинарный массив без копирования?
- Можно ли держать состояние в глобальных переменных Service Worker?
Разбор
Оба вида воркеров выполняют JavaScript вне главного потока и не видят DOM, общаются со страницей через postMessage. Web Worker это просто фоновый поток, который страница создаёт для тяжёлой работы: парсинг большого файла, обработка изображений, вычисления. Он живёт, пока жива страница. Service Worker другой по смыслу: это прокси между страницей и сетью. Он регистрируется на origin, перехватывает fetch-запросы страниц своего scope и решает, отдать ответ из кеша или из сети. На этом строятся офлайн-режим и PWA, а ещё push-уведомления и фоновая синхронизация. Он работает только по HTTPS, имеет жизненный цикл с установкой и активацией, а браузер может его усыплять в простое, поэтому состояние хранят в IndexedDB или Cache Storage, а не в переменных.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.