Как заблокировать поток в JS?
Основы языка
Поток в JS блокируется любой тяжёлой синхронной операцией: длинным циклом, тяжёлыми вычислениями или синхронными блокирующими API (`alert`, синхронный XHR). Это замораживает UI.
Как заблокировать поток
Тяжёлый цикл
for (let i = 0; i < 1e10; i++) {} // блокирует поток надолгоАктивное ожидание (busy-wait)
const end = Date.now() + 3000;
while (Date.now() < end) {} // блок на 3 секундыСинхронные блокирующие API
alert('текст'); // блокирует до закрытия
prompt('вопрос'); // блокирует до ответа
// синхронный XMLHttpRequest (устарел)Тяжёлая обработка данных
Огромные вычисления, синхронная обработка больших массивов, глубокая рекурсия.
Что происходит при блокировке
JS однопоточный — пока стек занят синхронной операцией:
- Event Loop не обрабатывает задачи.
- Браузер не отрисовывает.
- UI не реагирует на клики, анимации замирают («страница зависла»).
Зачем это знать
Блокировка — источник плохого UX. Её избегают: асинхронные операции не блокируют, тяжёлые вычисления выносят в Web Workers, работу разбивают на части.
Коротко для собеседования
Поток в JS блокирует любая тяжёлая синхронная операция: длинный/busy-wait цикл, тяжёлые вычисления, глубокая рекурсия, синхронные API (alert, prompt, синхронный XHR). Пока стек занят, Event Loop не работает и UI замерзает (однопоточность). Блокировки избегают — асинхронность, Web Workers, разбиение работы.