Maison > interface Web > js tutoriel > le corps du texte

Quelle est la différence entre la file d'attente de microtâches et la file d'attente de rappel en JavaScript asynchrone ?

PHPz
Libérer: 2023-08-24 09:33:02
avant
556 Les gens l'ont consulté

异步 JavaScript 中微任务队列和回调队列有什么区别?

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

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.

Exemple

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(&#39;start&#39;);
 
      setTimeout(function() {
         console.log(&#39;setTimeout&#39;);
      }, 0);
 
      Promise.resolve().then(function() {
         console.log(&#39;promise resolve&#39;);
      });
 
      console.log(&#39;end&#39;);
   </script>
</body>
</html>
Copier après la connexion

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
Copier après la connexion

Callback Queue

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.

Exemple

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(&#39;start&#39;);
 
      setTimeout(function() {
         console.log(&#39;setTimeout&#39;);
      }, 0);
 
      console.log(&#39;end&#39;);
   </script>
</body>
</html>
Copier après la connexion

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
Copier après la connexion

Les différences entre la file d'attente Microtask et la file d'attente de rappel

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.

  • Avantages de la file d'attente Microtask

    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.

    Avantages de la file d'attente de rappel

    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.

    Conclusion

    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!

    source:tutorialspoint.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!