Czym są zadania makro i mikro?
sobes.tech AI
Odpowiedź od AI
Zadania makro to duże, wysokopoziomowe etapy pracy przeglądarki, takie jak parsowanie HTML, budowa DOM, budowa CSSOM, obliczanie stylów, budowa drzewa renderowania, układ (Layout), malowanie (Paint) i kompozycja (Composite). Tworzą główny pipeline renderowania.
Zadania mikro to mniejsze, bardziej szczegółowe działania, które są wykonywane po zakończeniu bieżącego zadania makro i przed rozpoczęciem następnego. Należą do nich obsługa obietnic (Promise), MutationObserver, queueMicrotask.
Kluczowa różnica polega na tym, że zadania mikro zawsze są wykonywane natychmiast po bieżącym zadaniu makro, podczas gdy następne zadanie makro (np. kolejna klatka renderowania lub obsługa zdarzenia timera setTimeout) jest wykonywane dopiero po opróżnieniu kolejki zadań mikro.
Przykład kolejności wykonywania:
// Zadanie makro (kod początkowy)
console.log('Początek');
// Zadanie makro (timer)
setTimeout(() => {
console.log('Timer');
}, 0);
// Zadanie mikro (obietnica)
Promise.resolve().then(() => {
console.log('Obietnica');
});
// Zadanie makro (koniec kodu początkowego)
console.log('Koniec');
Wynik w konsoli:
Początek
Koniec
Obietnica
Timer
Kolejność wykonywania:
- Wykonywane jest początkowe zadanie makro (główny skrypt).
console.log('Początek').setTimeoutumieszcza zadanie makro w kolejce.Promise.resolve().then()umieszcza mikro zadanie w kolejce.console.log('Koniec').- Zadanie makro kończy się.
- Sprawdzana jest kolejka mikro zadań: wykonywane jest
Promise.resolve().then(). console.log('Obietnica').- Kolejka mikro zadań jest pusta.
- Przeglądarka obsługuje zadania w pętli zdarzeń, przechodzi do następnego zadania makro.
- Obsługiwane jest zadanie makro z
setTimeout. console.log('Timer').- Zadanie makro kończy się.
To zrozumienie jest ważne dla zarządzania kolejnością wykonywania operacji asynchronicznych i zrozumienia działania Event Loop.