Co jsou makro- a mikroúkoly?
sobes.tech AI
Odpověď od AI
Makroúkoly jsou velké, vysoce úrovňové fáze práce prohlížeče, jako je parsování HTML, konstrukce DOM, konstrukce CSSOM, výpočet stylů, konstrukce renderovacího stromu, rozvržení (Layout), malování (Paint) a složení (Composite). Tvoří hlavní výrobní linku renderování.
Mikroúkoly jsou menší, podrobnější akce, které se provádějí po dokončení aktuální makroúkoly a před začátkem další. Patří sem zpracování slibů (Promise), MutationObserver, queueMicrotask.
Klíčový rozdíl je v tom, že mikroúkoly se vždy okamžitě provedou po aktuální makroúkolě, zatímco následující makroúkol (například další renderovací snímek nebo zpracování události časovače setTimeout) se provede až poté, co je fronta mikroúkolů prázdná.
Příklad pořadí provádění:
// Makroúkol (počáteční kód)
console.log('Začátek');
// Makroúkol (časovač)
setTimeout(() => {
console.log('Časovač');
}, 0);
// Mikroúkol (slib)
Promise.resolve().then(() => {
console.log('Slib');
});
// Makroúkol (konec počátečního kódu)
console.log('Konec');
Výstup v konzoli:
Začátek
Konec
Slib
Časovač
Pořadí provádění:
- Spustí se počáteční makroúkol (hlavní skript).
console.log('Začátek').setTimeoutvloží makroúkol do fronty.Promise.resolve().then()vloží mikroúkol do fronty.console.log('Konec').- Hlavní makroúkol je dokončen.
- Zkontroluje se fronta mikroúkolů: provede se
Promise.resolve().then(). console.log('Slib').- Fronta mikroúkolů je prázdná.
- Prohlížeč zpracovává úkoly v událostní smyčce, přechází na další makroúkol.
- Makroúkol z
setTimeoutje zpracován. console.log('Časovač').- Makroúkol je ukončen.
Toto pochopení je důležité pro řízení pořadí provádění asynchronních operací a pochopení, jak funguje Event Loop.