PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Как заблокировать выполнение кода?

Продвинутые темы

Выполнение кода блокируют тяжёлой синхронной операцией, но это антипаттерн. «Блокировать» намеренно можно циклом, синхронными API (`alert`), а правильно «приостановить» — через асинхронное ожидание.

Как блокируется поток

Тяжёлый синхронный цикл

const end = Date.now() + 3000;
while (Date.now() < end) {} // блокирует поток на 3 секунды (UI замирает)

Синхронные блокирующие API

  • alert(), prompt(), confirm() — блокируют до ответа пользователя.
  • Синхронный XMLHttpRequest (устарел).
  • fs.readFileSync (Node).

Почему это плохо

JS однопоточный — блокировка замораживает UI: нет реакции на клики, анимации, рендер. Это антипаттерн.

Правильные альтернативы «паузе»

Асинхронная задержка (не блокирует)

const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
await sleep(1000); // "пауза" без блокировки потока

Поток свободен во время ожидания.

Разбить работу

Тяжёлую задачу — на части через setTimeout/очередь.

Web Workers

Тяжёлые вычисления — в отдельный поток, не блокируя основной.

Когда «блокировка» оправдана

Почти никогда в UI. Синхронные операции уместны только для быстрых вычислений.

Коротко для собеседования

Синхронно заблокировать поток можно тяжёлым циклом или блокирующими API (alert, синхронный XHR), но это антипаттерн — UI замерзает (JS однопоточный). Вместо блокировки для «паузы» используют асинхронное ожидание (await sleep(ms) через setTimeout), разбиение работы или Web Workers.

Другие вопросы раздела