Что такое макро- и микрозадачи?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Макрозадачи — это крупные, высокоуровневые этапы работы браузера, такие как парсинг HTML, построение DOM, построение CSSOM, расчёт стилей, построение дерева рендеринга, компоновка (Layout), покраска (Paint) и композиция (Composite). Они формируют основной конвейер рендеринга.
Микрозадачи — это более мелкие, детализированные действия, которые выполняются после завершения текущей макрозадачи и до начала следующей. К ним относятся обработка промисов (Promise), MutationObserver, queueMicrotask.
Ключевое различие в том, что микрозадачи всегда выполняются сразу после текущей макрозадачи, в то время как следующая макрозадача (например, следующий кадр рендеринга или обработка события таймера setTimeout) выполняется только после того, как очередь микрозадач будет пуста.
Пример порядка выполнения:
// Макрозадача (начальный код)
console.log('Начало');
// Макрозадача (таймер)
setTimeout(() => {
console.log('Таймер');
}, 0);
// Микрозадача (промис)
Promise.resolve().then(() => {
console.log('Промис');
});
// Макрозадача (конец начального кода)
console.log('Конец');
Вывод в консоль:
Начало
Конец
Промис
Таймер
Порядок выполнения:
- Выполняется начальная макрозадача (основной скрипт).
console.log('Начало').setTimeoutставит макрозадачу в очередь.Promise.resolve().then()ставит микрозадачу в очередь.console.log('Конец').- Основная макрозадача завершена.
- Проверяется очередь микрозадач: выполняется
Promise.resolve().then(). console.log('Промис').- Очередь микрозадач пуста.
- Браузер обрабатывает задачи в цикле событий, переходит к следующей макрозадаче.
- Обрабатывается макрозадача из
setTimeout. console.log('Таймер').- Макрозадача завершена.
Это понимание важно для управления порядком выполнения асинхронных операций и понимания работыEvent Loop.