Sobes.tech
Middle

Kas yra makro ir mikro užduotys?

sobes.tech AI

Atsakymas iš AI

Mikrozadavinės — tai smulkesni, detalesni veiksmai, atliekami po dabartinės makrozadavinės pabaigos ir prieš pradedant kitą. Jie apima Promise apdorojimą, MutationObserver, queueMicrotask.

Pagrindinis skirtumas tas, kad mikrozadavinės visada vykdomos iš karto po dabartinės makrozadavinės, o kita makrozadavinė (pavyzdžiui, kitame atnaujinimo kadre arba setTimeout) vykdoma tik tada, kai mikrozadavinės eilė yra tuščia.

Vykdymo tvarka pavyzdyje:

// Makrozadavinė (pradinis kodas)
console.log('Pradžia');

// Makrozadavinė (laikmatis)
setTimeout(() => {
  console.log('Laikmatis');
}, 0);

// Mikrozadavinė (promisas)
Promise.resolve().then(() => {
  console.log('Promisas');
});

// Makrozadavinė (pabaiga pradinių kodo)
console.log('Pabaiga');

Konsolės išvestis:

Pradžia
Pabaiga
Promisas
Laikmatis

Vykdymo tvarka:

  1. Pradžioje vykdoma pagrindinė makrozadavinė.
  2. console.log('Pradžia').
  3. setTimeout įkelia makrozadavinę į eilę.
  4. Promise.resolve().then() įkelia mikrozadavinę į eilę.
  5. console.log('Pabaiga').
  6. Pagrindinė makrozadavinė baigta.
  7. Tikrinama mikrozadavinės eilė ir vykdoma Promise.resolve().then().
  8. console.log('Promisas').
  9. Mikrozadavinės eilė tuščia.
  10. Naršyklė apdoroja įvykių ciklą ir pereina prie kitos makrozadavinės.
  11. Vykdoma setTimeout makrozadavinė.
  12. console.log('Laikmatis').
  13. Makrozadavinė baigta.

Šis supratimas yra svarbus asinchroninių operacijų vykdymo tvarkos valdymui ir Event Loop darbo supratimui.