Qu'est-ce que Boucle d'événements (event loop) ?
Mécanisme par lequel l'environnement d'exécution de JavaScript, sur un seul thread, retire un à un les traitements en attente pour les exécuter. Les traitements déclenchés par un clic, un minuteur ou la fin d'une communication sont placés comme tâches dans une file, et lorsque le code en cours se termine, la boucle d'événements retire la tâche suivante. Les traitements des Promise (microtâches) sont tous exécutés à la fin de chaque tâche, avant la tâche suivante. Si un traitement dure longtemps, le traitement des autres événements et l'affichage de l'écran sont bloqués.
Nom japonais: イベントループ
« Boucle d'événements (event loop) » apparaît dans 1 questions d'entraînement réparties sur 1 thèmes, dont Bases des technologies web.
Domaine: Bases des technologies web
Ordre d'exécution
Par exemple, si après console.log('A') on programme l'affichage de B avec setTimeout et celui de C avec then d'une Promise, puis qu'on exécute console.log('D'), l'affichage se fait dans l'ordre A, D, C, B. Le code synchrone s'exécute d'abord entièrement, puis la microtâche C, et enfin la tâche B. Même avec 0 ms pour setTimeout, l'exécution n'est pas immédiate.
Questions fréquentes
Un setTimeout de 0 ms s'exécute-t-il immédiatement ?
Non. Une fois le délai indiqué écoulé, le traitement est placé comme tâche dans la file, et il s'exécute après la fin du code en cours et des microtâches déjà en attente. 0 ms signifie « dès que possible, mais après le traitement en cours ».
Peut-on faire des calculs en parallèle en JavaScript ?
Le JavaScript de la page s'exécute lui-même sur un seul thread principal, mais un Web Worker permet d'exécuter des scripts en parallèle sur un autre thread. Un Worker n'ayant pas d'accès direct au DOM, il échange des messages avec le thread principal pour lui transmettre ses résultats.