Ответ вслух Middle Web API и воркеры спрашивают часто обновлено

Web Worker и Service Worker: в чём разница

Вопрос

Чем Web Worker отличается от Service Worker и когда что использовать?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Оба вида воркеров выполняют JavaScript вне главного потока и не видят DOM, общаются со страницей через postMessage. Web Worker это просто фоновый поток, который страница создаёт для тяжёлой работы: парсинг большого файла, обработка изображений, вычисления.

Что должно прозвучать в ответе

  • Оба работают в отдельном потоке и не имеют доступа к 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 ошибок.

Термины по теме