Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: microtask, render

Может ли микрозадача заблокировать рендер браузера?

Вопрос проверяет понимание того, как неправильная работа с microtask может привести к проблемам с производительностью.

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

Да, микрозадачи могут заблокировать рендер браузера. Браузер выполняет все microtask перед тем, как перейти к рендеру. Если microtask постоянно добавляют новые microtask, рендер откладывается. Это состояние называется starvation.

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

Как браузер решает, когда рендерить

Перед перечислением важно понять порядок шагов.

  1. Выполняется текущий JavaScript

  2. Выполняются все microtask

  3. Только после этого возможен рендер

Как возникает блокировка

Если внутри microtask создаётся новая microtask:

function loop() {
  Promise.resolve().then(loop);
}

loop();
  1. Очередь microtask никогда не становится пустой

  2. Браузер не доходит до шага рендера

  3. UI “зависает”

Почему macrotask так не делают

  1. После каждой macrotask браузер может выполнить рендер

  2. Macrotask не имеют приоритета над рендером

  3. Поэтому setTimeout безопаснее для долгих циклов

Практическое значение для фронтенда

  1. Осторожно с рекурсивными Promise

  2. Не делайте тяжёлые вычисления в microtask

  3. Для длительных процессов используйте:

    • setTimeout

    • requestIdleCallback

    • Web Workers

Вывод

Microtask могут заблокировать рендер, если очередь никогда не опустошается. Это редкая, но важная ловушка, которую любят спрашивать на собеседованиях.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • JavaScript

    JavaScript

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

#microtask

#render

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