Макрозадачи — это крупные, высокоуровневые этапы работы браузера, такие как парсинг HTML, построение DOM, построение CSSOM, расчёт стилей, построение дерева рендеринга, компоновка (Layout), покраска (Paint) и композиция (Composite). Они формируют основной конвейер рендеринга.
Микрозадачи — это более мелкие, детализированные действия, которые выполняются после завершения текущей макрозадачи и до начала следующей. К ним относятся обработка промисов (Promise), MutationObserver, queueMicrotask.
Ключевое различие в том, что микрозадачи всегда выполняются сразу после текущей макрозадачи, в то время как следующая макрозадача (например, следующий кадр рендеринга или обработка события таймера setTimeout) выполняется только после того, как очередь микрозадач будет пуста.
Пример порядка выполнения:
javascript
Вывод в консоль:
plaintext
Порядок выполнения:
console.log('Начало').setTimeout ставит макрозадачу в очередь.Promise.resolve().then() ставит микрозадачу в очередь.console.log('Конец').Promise.resolve().then().console.log('Промис').setTimeout.console.log('Таймер').Это понимание важно для управления порядком выполнения асинхронных операций и понимания работыEvent Loop.