Что такое Macrotask?
Асинхронность и Event Loop
Macrotask (макрозадача) — это единица работы в Event Loop, которую цикл берёт из очереди макрозадач по одной после выполнения всех микрозадач.
Что относится к макрозадачам
setTimeout,setInterval.setImmediate(Node.js).- Обработчики DOM-событий.
- Сетевые коллбэки, I/O.
MessageChannel,postMessage.
Порядок в Event Loop
1. Выполнить синхронный код.
2. Опустошить ВСЮ очередь микрозадач.
3. Взять ОДНУ макрозадачу.
4. Снова опустошить микрозадачи.
5. (Возможен рендеринг между макрозадачами.)setTimeout(() => console.log('macro'), 0);
Promise.resolve().then(() => console.log('micro'));
console.log('sync');
// sync → micro → macroМакрозадачи против микрозадач
- Микрозадачи (Promise,
queueMicrotask) — выполняются все сразу после текущей задачи, до следующей макрозадачи и рендера. - Макрозадачи — по одной за «тик»; между ними браузер может отрисовать кадр.
Практика
Разбиение тяжёлой работы на setTimeout даёт браузеру возможность отрисовать UI и обработать события между кусками.
Коротко для собеседования
Macrotask — задача из очереди макрозадач (setTimeout, события, I/O), которую Event Loop берёт по одной после опустошения всех микрозадач. Между макрозадачами возможен рендеринг, поэтому setTimeout всегда позже Promise.then.