Вопрос проверяет умение диагностировать блокировку главного потока долгими синхронными вычислениями, что критично для отзывчивости UI и серверных приложений.
Главный поток (main thread) в браузере и в Node.js выполняет JavaScript и обрабатывает события через event loop. Если синхронная функция работает долго, event loop не может перейти к следующей задаче: не обрабатываются клики, не перерисовывается UI, не срабатывают таймеры. Это и есть блокировка главного потока.
function heavy() {
let sum = 0;
for (let i = 0; i < 1e9; i++) sum += i;
return sum;
}
button.addEventListener('click', () => {
const result = heavy(); // блокирует поток на секунды
console.log(result);
});Пока выполняется цикл, браузер не может отрисовать даже индикатор загрузки. Пользователь думает, что страница зависла.
const worker = new Worker('heavy.js');
worker.postMessage({ n: 1e9 });
worker.onmessage = (e) => console.log(e.data);
// heavy.js
onmessage = (e) => {
let sum = 0;
for (let i = 0; i < e.data.n; i++) sum += i;
postMessage(sum);
};Итог: блокировку главного потока стоит искать там, где синхронный код выполняется дольше 50 мс. Для тяжёлых вычислений применяйте воркеры или дробление задач, чтобы сохранить отзывчивость интерфейса и стабильность event loop.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию