Воркеры
В JavaScript есть основной поток, в котором выполняется весь код. Для параллельного выполнения кода в отдельных потоках в JavaScript появились веб-воркеры.
Основной потом и воркеры полностью изолированы и не имеют доступа к переменным друг друга. Это позволяет избегать конфликтов параллельного доступа к общим ресурсам, как, например, race condition.
Воркеры не имеют доступа к DOM — не получится использовать воркер для обновления UI, он может только обработать большой объем данных.
Главный потом и воркеры общаются между собой с помощью сообщений.
Есть три типа воркеров:
dedicated
shared
service
Пример:
// в главном потоке
const worker = new Worker('./generate.js')
worker.postMessage({
command: 'generate',
quota: quota
})
worker.addEventListener('message', message => {
console.log(message)
})
// в воркере
addEventListener('message', message => {
console.log(message.data)
})
postMessage('Hi!')
postMessage({
result: 123,
})Сигнатура postMessage:
Shared Workers
Shared-воркеры отличаются от обычных тем, что к ним могут обращаться сразу несколько документов.
С их помощью можно организовать коммуникацию между несколькими окнами.
У shared-воркера есть свойство port, которое представляет собой инстанс объекта MessagePort:
Внутри воркера:
Service Workers
Сервис-воркеры позволяют перехватывать запросы к серверу и обрабатывать их. Таким образом, например, можно организовать кеширование данных на уровне сервис-воркера.
Также из сервис-воркеров можно отправлять пуш-уведомления.
Сначала необходимо зарегистрировать сервис-воркер с помощью метода register объекта navigator.serviceWorker:
При регистрации указывается путь у файлу с сервис-воркером и возвращается промис.
Жизненный цикл сервис-воркера:

В случае успешной установки, в сервис-воркере срабатывает событие install:
Также у сервис воркера есть события activate, idle, fetch.
У серсис-воркеров есть API для кеширования - CacheStorage, которое доступно под названием caches.
Стратегии кеширования
Cache only
Network only
Cache falling back to network
Network falling back to cache
Generic fallback
Last updated