En JavaScript asynchrone, il existe deux façons de planifier des tâches : File d'attente de microtâches et File d'attente de rappel. Le moteur JavaScript gère ces deux files d'attente différemment.
Microtask Queue est une file d'attente de tâches qui est exécutée après la tâche en cours. La file d'attente des microtâches est traitée par le moteur JavaScript avant de passer à la tâche suivante dans la file d'attente de rappel.
Voici un exemple du fonctionnement de la file d'attente des microtâches -
<!doctype html> <html> <head> <title>Examples</title> </head> <body> <div id="result"></div> <script> console.log('start'); setTimeout(function() { console.log('setTimeout'); }, 0); Promise.resolve().then(function() { console.log('promise resolve'); }); console.log('end'); </script> </body> </html>
Dans l'exemple ci-dessus, le rappel "setTimeout" est ajouté à la file d'attente de rappel. "Promise.resolve" est ajouté à la file d'attente des microtâches. Le moteur JavaScript exécutera d'abord toutes les tâches de la file d'attente des microtâches avant d'entrer dans la file d'attente de rappel.
Donc, la sortie du code ci-dessus sera (dans la console) -
start end promise resolve setTimeout
Callback Queue est une file d'attente de tâches qui sont exécutées après la tâche en cours. La Callback Queue est traitée par le moteur JavaScript une fois que toutes les tâches de la file d'attente des microtâches ont été exécutées.
Voici un exemple du fonctionnement de la file d'attente de rappel -
<!doctype html> <html> <head> <title>Examples</title> </head> <body> <div id="result"></div> <script> console.log('start'); setTimeout(function() { console.log('setTimeout'); }, 0); console.log('end'); </script> </body> </html>
Dans l'exemple ci-dessus, le rappel 'setTimeout' est ajouté à la file d'attente de rappel. Le moteur JavaScript exécutera le rappel « setTimeout » après avoir exécuté tout le code de la tâche en cours.
Donc, la sortie du code ci-dessus sera (dans la console) -
start end setTimeout
Microtask Queue et CallbackQueue sont
Microtask Le la file d'attente est traitée par le moteur JavaScript avant de passer à la tâche suivante dans la file d'attente de rappel. CallbacksLa file d'attente est traitée par le moteur JavaScript une fois que toutes les tâches de la file d'attente des microtâches ont été exécutées.
MicrotaskTraitement de la file d'attente une fois la tâche en cours terminée. CallbackLa file d'attente est traitée une fois que la file d'attente des microtâches est vide. Les files d'attente
Microtâches sont traitées dans des boucles d'événements distinctes. Les rappelsLa file d'attente sont traités dans la même boucle d'événements.
Certains avantages de la file d'attente Microtask par rapport à la file d'attente de rappel sont les suivants :
La file d'attente Microtask est gérée dans une boucle d'événements distincte, ce qui signifie que si le thread principal est bloqué, la file d'attente microtâche sera toujours
La file d'attente des microtâches sera traitée une fois la tâche en cours terminée, ce qui signifie que tout code qui dépend de la tâche en cours peut être ajouté à la file d'attente des microtâches et il sera traité. Exécuté immédiatement après la fin de la tâche en cours.
La file d'attente des microtâches a une priorité plus élevée que la file d'attente de rappel, ce qui signifie que si les deux files d'attente sont programmées pour s'exécuter en même temps, la file d'attente des microtâches s'exécutera en premier.
L'un des avantages de la file d'attente de rappel par rapport à la file d'attente des microtâches est que la file d'attente de rappel est traitée dans la même boucle d'événements que le thread principal. Cela signifie que si le thread principal est bloqué, la file d'attente de rappel ne sera pas traitée.
Dans ce tutoriel, nous avons examiné la différence entre les files d'attente de microtâches et les files d'attente de rappel en JavaScript asynchrone. Nous avons également examiné les mérites de chaque cohorte.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!