Wat zijn macro- en microtaken?
sobes.tech AI
Antwoord van AI
Macro-taken zijn grote, hoog-niveau fasen van de browserwerkzaamheden, zoals HTML-parsering, DOM-bouw, CSSOM-bouw, stijlberekeningen, het bouwen van de renderboom, layout, schilderen (Paint) en compositie (Composite). Ze vormen de hoofdconveyor van de rendering.
Micro-taken zijn kleinere, meer gedetailleerde acties die worden uitgevoerd nadat de huidige macro-taak is voltooid en voordat de volgende begint. Ze omvatten het afhandelen van promises (Promise), MutationObserver, queueMicrotask.
Het belangrijkste verschil is dat micro-taken altijd onmiddellijk worden uitgevoerd na de huidige macro-taak, terwijl de volgende macro-taak (bijvoorbeeld de volgende render frame of de timergebeurtenis setTimeout) pas wordt uitgevoerd nadat de micro-taak wachtrij leeg is.
Voorbeeld van de volgorde van uitvoering:
// Macro-taak (oorspronkelijke code)
console.log('Begin');
// Macro-taak (timer)
setTimeout(() => {
console.log('Timer');
}, 0);
// Micro-taak (promise)
Promise.resolve().then(() => {
console.log('Promise');
});
// Macro-taak (einde van de oorspronkelijke code)
console.log('Einde');
Uitvoer in de console:
Begin
Einde
Promise
Timer
Uitvoeringsvolgorde:
- De initiële macro-taak (het hoofdscript) wordt uitgevoerd.
console.log('Begin').setTimeoutplaatst de macro-taak in de wachtrij.Promise.resolve().then()plaatst de micro-taak in de wachtrij.console.log('Einde').- De hoofdmacro-taak is voltooid.
- De micro-taakwachtrij wordt gecontroleerd:
Promise.resolve().then()wordt uitgevoerd. console.log('Promise').- De micro-taakwachtrij is leeg.
- De browser verwerkt taken in de event loop, gaat naar de volgende macro-taak.
- De macro-taak van
setTimeoutwordt verwerkt. console.log('Timer').- De macro-taak is voltooid.
Dit begrip is belangrijk voor het beheren van de volgorde van asynchrone operaties en het begrijpen van hoe de Event Loop werkt.