Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: web worker, optimizations

Какой механизм взаимодействия основного потока с Web Worker?

Вопрос проверяет знание способов обмена данными между потоками в JavaScript.

Короткий ответ

Основной поток и Web Worker общаются через асинхронные сообщения с помощью postMessage и события onmessage. Данные передаются копированием (не общей памятью), если не используется SharedArrayBuffer.

Длинный ответ

Механизм взаимодействия:

  1. postMessage(data) — отправка данных из одного потока в другой.

  2. onmessage — обработчик для получения данных.

Пример:

// Основной поток
const worker = new Worker('worker.js');
worker.postMessage({ command: 'sum', numbers: [1, 2, 3] });

worker.onmessage = (e) => {
  console.log('Sum:', e.data); // Получит 6
};

// Web Worker (worker.js)
onmessage = (e) => {
  if (e.data.command === 'sum') {
    const sum = e.data.numbers.reduce((a, b) => a + b, 0);
    postMessage(sum);
  }
};

Особенности:

  • Данные передаются копированием (сериализуются через structured cloning).

  • Для передачи больших данных без копирования можно использовать SharedArrayBuffer (но это требует синхронизации через Atomics).

  • Сообщения асинхронны: отправка через postMessage не блокирует поток.

Уровень

  • Рейтинг:

    3

  • Сложность:

    7

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#web worker

#optimizations

Подпишись на React Developer в телеграм