Вопрос проверяет понимание приоритетов Event Loop и их влияния на производительность и UI.
Если очередь microtask постоянно пополняется, Event Loop не перейдёт к macrotask.
В результате UI не будет перерисовываться.
Приложение может «зависнуть» без явных ошибок.
Это называется starvation macrotask.
Microtask имеют абсолютный приоритет в рамках одной итерации Event Loop.
Алгоритм Event Loop устроен так:
выполняется синхронный код
выполняются все microtask
только потом выполняется macrotask
Если каждая microtask добавляет новую microtask:
function loop() {
Promise.resolve().then(loop);
}
loop();
В результате:
очередь microtask никогда не опустеет
macrotask не начнут выполняться
отрисовка UI не произойдёт
браузер станет неотзывчивым
Такая ситуация:
трудно отлаживается
не вызывает ошибок
выглядит как «заморозка» страницы
На практике:
не создают рекурсивные microtask
используют setTimeout для разрыва цикла
следят за логикой Promise.then
Бесконечные microtask могут полностью заблокировать приложение. Приоритет microtask нужно использовать осознанно.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию