Skip to main content

Мікро vs Макро таски

Коротко

Мікротаски (microtasks) і макротаски (macrotasks) - це різні "черги завдань", які обробляються в різний час усередині Event Loop.

  • Макротаски - це "великі" події: таймери, мережеві запити, події DOM.
  • Мікротаски - це "миттєві" завдання, які виконуються одразу після поточного коду, але до наступної макротаски.

Порівняльна таблиця

КритерійМакротаски (Task Queue)Мікротаски (Microtask Queue)
Коли виконуютьсяПісля очищення стека і всіх мікротасокОдразу після поточного коду (перед макротаскою)
ЧергаTask QueueMicrotask Queue
ПрикладиsetTimeout, setInterval, setImmediate, обробники подій, fetch, XHRPromise.then, Promise.catch, queueMicrotask, MutationObserver
Пріоритетнижчийвищий
Кількість, що виконується за разОдна за ітерацію Event LoopУсі мікротаски підряд, поки черга не порожня
ДжерелоЗовнішні API браузера (Web API)Вбудовані мікрозадачі рушія JS
Типова метаВідкладене виконання, асинхронні подіїРеакції на завершення промісів, дрібні ланцюжки дій

Приклад, що показує різницю

javascript
console.log('1'); setTimeout(() => console.log('2'), 0); Promise.resolve().then(() => console.log('3')); console.log('4');

Порядок виводу:

javascript
1 4 3 2

Пояснення:

  1. 1 і 4 → виконуються синхронно (у стеку).
  2. Promise.then(...) → потрапляє в чергу мікротасок.
  3. setTimeout(...) → потрапляє в чергу макротасок.
  4. Після очищення стека виконуються всі мікротаски → виводить 3.
  5. Потім виконується перша макротаска → виводить 2.

Важлива деталь

Після кожної макротаски Event Loop:

  1. Виконує всі мікротаски (поки черга не порожня),
  2. Потім бере наступну макротаску,
  3. Повторює цикл.

Візуально

javascript
┌─────────────────────────────────────────────────────┐ │ Виклик функцій (Call Stack) │ │─────────────────────────────────────────────────────│ │ Мікротаски (Microtask Queue) │ ← виконуються одразу після стека │─────────────────────────────────────────────────────│ │ Макротаски (Task Queue) │ ← виконуються після мікротасок └─────────────────────────────────────────────────────┘

Підсумок

ЩоКолиПриклад
МікротаскаПісля поточного коду, до макротасокPromise.then, queueMicrotask
МакротаскаПісля всіх мікротасокsetTimeout, setInterval, fetch
Event LoopСлідкує, щоб стек був порожній → мікротаски → макротаска → повтор-

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.