Hack Frontend Community

Что такое Web Workers?

Web Worker — это механизм в JavaScript, который позволяет запускать фоновый поток для выполнения тяжёлых или длительных операций без блокировки основного UI.

С помощью Web Workers можно:

  • выполнять сложные вычисления,
  • обрабатывать большие массивы данных,
  • работать с canvas или WebAssembly,
  • и при этом не замораживать интерфейс.

Что не умеет Web Worker?

  • Не имеет доступа к DOM
  • Не может обращаться к window, document, alert, localStorage
  • Может работать только через сообщения (message passing)

Пример: создание Web Worker

worker.js — скрипт для воркера

// worker.js
self.onmessage = function (e) {
  const result = e.data * 2;
  postMessage(result); // отправляем ответ обратно
};

main.js — основной скрипт

// main.js
const worker = new Worker('worker.js');

worker.onmessage = function (e) {
  console.log('Ответ от воркера:', e.data);
};

worker.postMessage(21); // Отправляем данные воркеру

В этом примере 21 отправляется воркеру, он обрабатывает и возвращает 42.

Преимущества Web Workers

  • Асинхронность: тяжелые задачи выполняются без заморозки интерфейса
  • Производительность: можно распараллелить обработку данных
  • Обмен сообщениями: простой API через postMessage

API Web Workers

Метод/событиеНазначение
new Worker(url)Создание воркера
worker.postMessage()Отправка данных воркеру
worker.onmessageПолучение данных из воркера
worker.terminate()Принудительная остановка воркера
self.onmessageОбработка входящих данных внутри воркера
postMessage()Отправка ответа из воркера в основной поток

Где применять Web Workers?

  • Обработка больших массивов данных
  • Генерация графики, рендеринг
  • Сжатие изображений
  • Криптография
  • Парсинг больших JSON/CSV
  • Machine Learning в браузере (через WebAssembly + Worker)

Минусы и ограничения

  • Отладка сложнее, чем обычного JS
  • Нет доступа к DOM/Window
  • Работают по CORS, лучше запускать с сервера