Maison > interface Web > js tutoriel > Comprendre la boucle d'événement JavaScript

Comprendre la boucle d'événement JavaScript

Barbara Streisand
Libérer: 2025-01-26 20:33:13
original
627 Les gens l'ont consulté

Comprendre la boucle d'événements de JavaScript : un guide complet

JavaScript, étant monothread, exécute le code de manière séquentielle. Cela présente un défi lorsqu'il s'agit d'opérations asynchrones (telles que la récupération de données sur le serveur ou les interactions utilisateur) qui pourraient autrement bloquer le thread principal, entraînant une absence de réponse. La solution ? La Boucle d'événement. Cet article fournit une explication étape par étape de la boucle d'événements, clarifiant comment JavaScript gère l'exécution du code, les tâches et les opérations asynchrones.

La boucle d'événement expliquée

La boucle d'événements est le mécanisme de base permettant à l'architecture monothread de JavaScript de gérer efficacement les tâches asynchrones. Il empêche le blocage en coordonnant l'interaction entre la pile d'appels, les API Web, les files d'attente de rappel et les files d'attente de microtâches. Explorons ces composants.

Composants clés de la boucle d'événement

  1. Call Stack : Cette pile gère les appels de fonctions. Les fonctions sont ajoutées lorsqu'elles sont appelées et supprimées une fois terminées.
  2. API Web/API de nœud : Ces API externes gèrent des tâches asynchrones telles que setTimeout(), fetch et les événements DOM. Ils opèrent en dehors de la pile d'appels.
  3. File d'attente de rappel (file d'attente des tâches) : Lorsqu'une opération asynchrone se termine, sa fonction de rappel associée est placée dans cette file d'attente, en attente d'exécution.
  4. File d'attente des microtâches : Cette file d'attente donne la priorité aux tâches telles que les résolutions de promesses et les MutationObserver rappels, en les exécutant avant les tâches dans la file d'attente de rappel.
  5. Boucle d'événements : Surveillant constamment la pile d'appels, la boucle d'événements déplace la tâche suivante (de l'une ou l'autre file d'attente) sur la pile une fois que la pile est vide.

Un exemple étape par étape

Illustrons le fonctionnement de la boucle d'événements avec un exemple de code :

Understanding JavaScript Event Loop

  1. Le code synchrone s'exécute ligne par ligne. console.log("Start") est ajouté à la pile d'appels, enregistre "Démarrer", puis est supprimé.
  2. setTimeout() est ajouté à la pile d'appels. Il enregistre son rappel auprès d'une API Web, puis est supprimé. Le rappel attend dans l'API Web, son minuteur étant réglé sur 0 milliseconde.
  3. console.log("End") est ajouté, enregistre "Fin" et est supprimé.
  4. La pile d'appels est désormais vide. La boucle d'événements vérifie la file d'attente des tâches : le rappel setTimeout, après l'expiration de son délai, passe de l'API Web à la file d'attente des tâches. La boucle d'événements le pousse sur la pile d'appels, elle enregistre "Timeout callback" et est supprimée.

Understanding JavaScript Event Loop

La sortie :

<code>Start
End
Timeout callback</code>
Copier après la connexion
Copier après la connexion

Comprendre les files d'attente de microtâches

JavaScript ajoute une autre couche : les Microtâches, principalement associées aux Promesses. Les microtâches sont priorisées ; ils s'exécutent immédiatement après le code synchrone, même avant les tâches dans la file d'attente de rappel.

Considérez cet exemple :

Understanding JavaScript Event Loop

Flux d'exécution :

  1. console.log("Start") et console.log("End") s'exécutent de manière synchrone, en enregistrant "Début" et "Fin".
  2. Le rappel de
  3. setTimeout() est planifié dans l'API Web.
  4. Le rappel
  5. de Promise.resolve().then() est ajouté à la file d'attente des microtâches.
  6. La boucle d'événements traite d'abord la file d'attente des microtâches, en enregistrant "Promesse résolue".
  7. Enfin, la boucle d'événements traite la file d'attente des tâches en enregistrant "Rappel du délai d'attente".

Understanding JavaScript Event Loop

La sortie :

<code>Start
End
Timeout callback</code>
Copier après la connexion
Copier après la connexion

Cette priorisation garantit que les tâches urgentes (comme les résolutions de promesses) sont traitées rapidement.

Mettre vos connaissances à l'épreuve

Testez votre compréhension : prédisez le résultat de cet extrait de code, puis comparez-le au résultat réel :

Understanding JavaScript Event Loop

Conclusion

La nature monothread de JavaScript est complétée par la boucle d'événements, permettant une gestion efficace des opérations asynchrones. La pile d'appels, les API Web, la file d'attente de rappel et la file d'attente de microtâches fonctionnent ensemble, orchestrées par la boucle d'événements, pour maintenir la réactivité et l'exécution fluide du code JavaScript, quel que soit le type de tâche asynchrone. La maîtrise de la boucle d'événements est essentielle pour maîtriser la programmation asynchrone en JavaScript.

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:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal