Τι είναι οι μακρο- και μικρο-εργασίες;
sobes.tech AI
Απάντηση από AI
Οι macro-εργασίες είναι μεγάλα, υψηλού επιπέδου στάδια της εργασίας του περιηγητή, όπως η ανάλυση HTML, η κατασκευή DOM, η κατασκευή CSSOM, ο υπολογισμός στυλ, η κατασκευή του δέντρου απόδοσης, το layout, η ζωγραφική (Paint) και η σύνθεση (Composite). Δημιουργούν τον κύριο αγωγό απόδοσης.
Οι micro-εργασίες είναι μικρότερες, πιο λεπτομερείς ενέργειες που εκτελούνται μετά την ολοκλήρωση της τρέχουσας macro-εργασίας και πριν από την έναρξη της επόμενης. Περιλαμβάνουν τη διαχείριση υποσχέσεων (Promise), MutationObserver, queueMicrotask.
Το βασικό διαφορά είναι ότι οι micro-εργασίες εκτελούνται πάντα αμέσως μετά την τρέχουσα macro-εργασία, ενώ η επόμενη macro-εργασία (π.χ. το επόμενο πλαίσιο απόδοσης ή η διαχείριση γεγονότος χρονόμετρου setTimeout) εκτελείται μόνο αφού η ουρά micro-εργασιών είναι άδεια.
Παράδειγμα σειράς εκτέλεσης:
// Macro-εργασία (αρχικός κώδικας)
console.log('Αρχή');
// Macro-εργασία (χρονοδιακόπτης)
setTimeout(() => {
console.log('Χρονόμετρο');
}, 0);
// Micro-εργασία (υπόσχεση)
Promise.resolve().then(() => {
console.log('Υπόσχεση');
});
// Macro-εργασία (τέλος αρχικού κώδικα)
console.log('Τέλος');
Έξοδος στην κονσόλα:
Αρχή
Τέλος
Υπόσχεση
Χρονόμετρο
Σειρά εκτέλεσης:
- Εκτελείται η αρχική macro-εργασία (κύριο σενάριο).
console.log('Αρχή').setTimeoutτοποθετεί τη macro-εργασία στην ουρά.Promise.resolve().then()τοποθετεί τη micro-εργασία στην ουρά.console.log('Τέλος').- Η κύρια macro-εργασία ολοκληρώνεται.
- Ελέγχεται η ουρά micro-εργασιών: εκτελείται το
Promise.resolve().then(). console.log('Υπόσχεση').- Η ουρά micro-εργασιών είναι άδεια.
- Ο περιηγητής επεξεργάζεται τις εργασίες στον βρόχο γεγονότων, μεταβαίνει στην επόμενη macro-εργασία.
- Η macro-εργασία από το
setTimeoutεπεξεργάζεται. console.log('Χρονόμετρο').- Η macro-εργασία ολοκληρώνεται.
Αυτή η κατανόηση είναι σημαντική για τη διαχείριση της σειράς εκτέλεσης ασύγχρονων λειτουργιών και την κατανόηση του πώς λειτουργεί το Event Loop.