Бесконечно ли растет очередь задач?
Массивы и структуры данных
Очередь задач не растёт бесконечно сама по себе, но её можно переполнить, генерируя задачи быстрее, чем они обрабатываются — тогда возможна деградация или зависание.
В нормальной ситуации
Event Loop обрабатывает задачи по мере поступления: опустошает микрозадачи, берёт макрозадачу, повторяет. Если задачи добавляются с разумной скоростью, очередь не растёт.
Когда очередь растёт
Бесконечная генерация микрозадач
Микрозадача, порождающая новую микрозадачу, блокирует цикл — не даёт дойти до макрозадач и рендера (страница «зависает»):
function loop() {
Promise.resolve().then(loop); // бесконечная микрозадача
}
loop(); // блокирует рендерингБыстрее добавляют, чем обрабатывают
Если события/таймеры генерируются чаще, чем успевают выполняться (тяжёлые обработчики scroll/resize), очередь макрозадач накапливается → задержки, лаги.
Ограничения
- Память ограничена — бесконечный рост приведёт к нехватке памяти или зависанию.
- Практически движок не даёт «переполниться» тихо — либо всё тормозит, либо падает.
Как избежать
- Не создавать бесконечные цепочки микрозадач.
- Троттлинг/дебаунс частых событий.
- Разбивать тяжёлую работу.
Коротко для собеседования
Сама по себе очередь не растёт бесконечно, но её можно переполнить, генерируя задачи быстрее обработки. Бесконечная цепочка микрозадач блокирует рендер и макрозадачи (зависание). Частые тяжёлые события накапливают очередь. Избегают дебаунсом/троттлингом и разбиением работы.