Ce sunt sarcinile macro și micro?
sobes.tech AI
Răspuns de la AI
Task-urile macro sunt etape mari, de nivel înalt, ale procesului browser-ului, cum ar fi parsarea HTML, construirea DOM, construirea CSSOM, calcularea stilurilor, construirea arborelui de redare, layout, pictare (Paint) și compoziție (Composite). Ele formează conductul principal de redare.
Task-urile micro sunt acțiuni mai mici, detaliate, care sunt executate după finalizarea task-ului macro curent și înainte de începerea următorului. Acestea includ gestionarea promisiunilor (Promise), MutationObserver, queueMicrotask.
Diferența cheie este că task-urile micro sunt întotdeauna executate imediat după task-ul macro curent, în timp ce următorul task macro (de exemplu, următorul cadru de redare sau gestionarea evenimentului timer setTimeout) se execută doar după ce coada de task-uri micro este goală.
Exemplu de ordine de execuție:
// Task macro (cod inițial)
console.log('Început');
// Task macro (temporizator)
setTimeout(() => {
console.log('Temporizator');
}, 0);
// Task micro (promisiune)
Promise.resolve().then(() => {
console.log('Promisiune');
});
// Task macro (sfârșitul codului inițial)
console.log('Sfârșit');
Ieșire în consolă:
Început
Sfârșit
Promisiune
Temporizator
Ordinea de execuție:
- Se execută task-ul macro inițial (scriptul principal).
console.log('Început').setTimeoutplasează task-ul macro în coadă.Promise.resolve().then()plasează task-ul micro în coadă.console.log('Sfârșit').- Task-ul macro principal se încheie.
- Se verifică coada de task-uri micro: se execută
Promise.resolve().then(). console.log('Promisiune').- Coada de task-uri micro este goală.
- Browser-ul procesează task-urile în bucla de evenimente, trece la următorul task macro.
- Task-ul macro de
setTimeouteste procesat. console.log('Temporizator').- Task-ul macro se încheie.
Această înțelegere este importantă pentru gestionarea ordinii de execuție a operațiilor asincrone și pentru înțelegerea modului în care funcționează Event Loop-ul.