Этот вопрос проверяет понимание разницы между основным потоком и Web Workers в JavaScript, включая их ограничения и возможности.
Основной поток (UI thread) отвечает за выполнение JavaScript, отрисовку страницы и обработку событий. Web Worker — это фоновый поток, который может выполнять сложные вычисления, но не имеет доступа к DOM и некоторым API браузера.
Основной поток в браузере:
Управляет выполнением JavaScript, отрисовкой страницы (рендерингом) и обработкой пользовательских событий (клики, ввод и т. д.).
Если в нём выполняется долгая синхронная операция (например, цикл на миллиард итераций), интерфейс "зависнет".
Web Worker:
Работает в отдельном потоке, не блокируя основной.
Не имеет доступа к DOM, window, document и многим API (например, localStorage).
Общается с основным потоком через postMessage (асинхронный обмен данными).
Полезен для тяжёлых вычислений (например, обработка больших массивов, машинное обучение в браузере).
Пример:
// Основной поток (main.js)
const worker = new Worker('worker.js');
worker.postMessage({ data: [1, 2, 3] }); // Отправка данных
worker.onmessage = (e) => console.log('Result:', e.data); // Получение результата
// Web Worker (worker.js)
onmessage = (e) => {
const result = e.data.data.map(x => x * 2); // Вычисления в фоне
postMessage(result); // Отправка обратно
};