Mi a makro- és mikrofeladat?
sobes.tech MI
Válasz az MI-től
A makrofeladatok a böngésző nagy, magas szintű munkafázisai, mint például HTML-parsing, DOM-építés, CSSOM-építés, stílusok számítása, renderfa építése, layout, festés (Paint) és összetétel (Composite). Ezek alkotják a fő renderláncot.
A mikrofeladatok kisebb, részletesebb műveletek, amelyek a jelenlegi makrofeladat befejezése után és a következő kezdete előtt hajtódnak végre. Ide tartozik a promise-k (Promise), MutationObserver, queueMicrotask kezelése.
A fő különbség az, hogy a mikrofeladatok mindig azonnal a jelenlegi makrofeladat után futnak, míg a következő makrofeladat (például a következő render frame vagy a setTimeout időzítő esemény) csak akkor fut le, miután a mikrofeladatok sor véget ért.
Példa végrehajtási sorrendre:
// Makrofeladat (kezdeti kód)
console.log('Kezdet');
// Makrofeladat (időzítő)
setTimeout(() => {
console.log('Időzítő');
}, 0);
// Mikrofeladat (ígéret)
Promise.resolve().then(() => {
console.log('Ígéret');
});
// Makrofeladat (kód vége)
console.log('Vége');
A konzolon a kimenet:
Kezdet
Vége
Ígéret
Időzítő
Végrehajtási sorrend:
- A kezdeti makrofeladat (fő szkript) fut.
console.log('Kezdet').- A
setTimeouta makrofeladatot a sorba helyezi. - A
Promise.resolve().then()a mikrofeladatot a sorba helyezi. console.log('Vége').- A fő makrofeladat befejeződik.
- A mikrofeladatok sorát ellenőrizzük: a
Promise.resolve().then()végrehajtódik. console.log('Ígéret').- A mikrofeladatok sora üres.
- A böngésző az eseményciklusban feldolgozza a feladatokat, átmegy a következő makrofeladatra.
- A
setTimeoutmakrofeladata feldolgozásra kerül. console.log('Időzítő').- A makrofeladat befejeződik.
Ez a megértés fontos az aszinkron műveletek végrehajtási sorrendjének kezelésében és az Event Loop működésének megértésében.