Что такое 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, лучше запускать с сервера