Table des matières
Comment fonctionnent les minuteries JavaScript
Maison interface Web js tutoriel Introduction détaillée au fonctionnement des minuteries JavaScript

Introduction détaillée au fonctionnement des minuteries JavaScript

Aug 09, 2018 am 10:22 AM

Comment fonctionnent les minuteries JavaScript

balises (séparées par des espaces) : minuteries JavaScript


J'ai récemment examiné les principes d'Ajax à cette époque , j'ai vu un article étranger qui expliquait le principe de fonctionnement du minuteur JavaScript, ce qui m'a aidé à bien comprendre le mode de fonctionnement monothread de js. Traduisez-le ici pour votre référence, adresse d'origine.
Texte de traduction
Fondamentalement parlant, il est très important de comprendre comment fonctionnent les minuteries JavaScript. Habituellement, js se comporte dans un seul thread. Examinons d'abord les trois fonctions qui peuvent construire et faire fonctionner des minuteries.

 - 启动单个定时器,在延迟后调用指定的功能。该函数返回一个唯一的ID,该Id可以用于取消定时器    var id = setTimeout(fn, delay); 
 - 类似setTimeout但不断地调用函数(每次都有延迟),直到它被取消,类似于定时任务。同上也返回唯一ID用于取消定时器    var id = setInterval(fn, delay); 
 - 接受计时器ID(由上述任一功能返回)并停止触发计时器回调。
    clearInterval(id);
    clearTimeout(id);
Copier après la connexion

Pour comprendre le fonctionnement interne des minuteries, nous devons explorer un concept important : il n'est pas garanti que les délais des minuteries soient exacts. Étant donné que tout le JavaScript du navigateur s'exécute sur un seul thread, les événements asynchrones (tels que les clics de souris et les minuteries) ne s'exécutent que lorsqu'ils peuvent être exécutés. Ceci est mieux démontré à l'aide d'un diagramme, comme celui-ci :

Introduction détaillée au fonctionnement des minuteries JavaScript

Il y a beaucoup d'informations à comprendre dans ce diagramme, et le comprendre complètement vous donnera une meilleure compréhension de l'asynchrone. JavaScript La façon dont fonctionne l'exécution. Ce graphique est unidimensionnel : verticalement, nous avons le temps (horloge murale) en millisecondes. La case bleue indique la partie de JavaScript en cours d'exécution. Par exemple, l'exécution du premier bloc JavaScript prend environ 18 ms, un clic de souris sur le bloc prend environ 11 ms, et ainsi de suite.

Étant donné que JavaScript ne peut exécuter qu'un seul morceau de code à la fois (en raison de sa nature monothread), chaque bloc de code « bloque » la progression d'autres événements asynchrones. Cela signifie que lorsqu'un événement asynchrone se produit (comme un clic de souris, le déclenchement d'un minuteur ou la fin d'une requête XMLHttpRequest), il est mis en file d'attente pour une exécution ultérieure (la manière dont cette mise en file d'attente se produit dépend du navigateur). Les navigateurs varient, voici un bref explication).

Tout d'abord, dans le premier bloc de JavaScript, démarrez deux minuteries : 10 ms setTimeout et 10 ms setInterval. En raison de l'endroit et du moment où le minuteur démarre, il se déclenche avant que nous ayons réellement terminé le premier bloc de code. Mais notez qu'il ne sera pas exécuté immédiatement (il ne peut pas le faire à cause des threads) mais sera mis en file d'attente pour être exécuté au prochain moment disponible.

De plus, dans le premier bloc JavaScript, on voit le clic de souris. Le rappel JavaScript associé à l'événement de clic de souris (nous ne savons jamais quand l'utilisateur effectue une action, il est donc considéré comme asynchrone) ne peut pas être exécuté immédiatement, donc, comme le minuteur initial, il est mis en file d'attente pour être exécuté ultérieurement.

Immédiatement après que le bloc initial de JavaScript soit terminé, le navigateur en cours d'exécution demande : Quelles tâches sont dans la file d'attente en attente d'exécution ? Dans ce cas, le gestionnaire de clics de souris et le rappel du minuteur attendent. Le navigateur en sélectionne ensuite un (rappel par clic de souris) et l'exécute immédiatement. Le minuteur attendra la prochaine fois qu'il sera retiré de la file d'attente pour être exécuté.

Notez que lorsque le gestionnaire de clic de souris s'exécute, le premier rappel d'intervalle est exécuté. Comme un minuteur, son gestionnaire est mis en file d'attente pour une exécution ultérieure. Cependant, veuillez noter que lorsque l'intervalle est à nouveau déclenché (lors de l'exécution du programme de minuterie), le rappel d'intervalle d'Interval est ignoré (Note du traducteur : je ne le comprends pas très bien ici, veuillez laisser un message pour échanger des conseils. Est-ce car il y a déjà un intervalle en file d'attente ? Si vous souhaitez appeler un rappel d'intervalle lors de l'exécution d'une grande partie de code, les rappels d'intervalle seront ajoutés consécutivement à la file d'attente des tâches, sans délai entre eux. Les navigateurs se contentent souvent d'accéder à la file d'attente et de récupérer les tâches jusqu'à ce qu'il n'y ait plus d'autres tâches dans la file d'attente.

En fait, nous pouvons voir que le rappel du troisième intervalle se déclenche pendant que l'intervalle lui-même est en cours d'exécution. Cela nous montre un fait important : les intervalles ne se soucient pas de ce qui est en cours d'exécution, ils font la queue sans discernement.

Enfin, une fois l'exécution du deuxième rappel d'intervalle terminée, nous pouvons voir que le moteur JavaScript n'a aucune tâche à effectuer. Cela signifie que le navigateur attend maintenant qu'un nouvel événement asynchrone se produise. Lorsque l'intervalle se déclenche à nouveau, il est à la position 50 ms. Cependant, cette fois, aucun programme n’est en cours d’exécution, il est donc déclenché immédiatement.

Regardons un exemple pour mieux illustrer la différence entre setTimeout et setInterval.

setTimeout(function(){
  /* Some long block of code... */
  setTimeout(arguments.callee, 10);
}, 10);

setInterval(function(){
  /* Some long block of code... */}, 10);
Copier après la connexion

Ces deux morceaux de code peuvent sembler fonctionnellement équivalents à première vue, mais ils ne le sont pas. Il convient de noter que le code setTimeout a toujours un délai d'au moins 10 ms après l'exécution du rappel précédent (cela peut finir par être supérieur, mais jamais inférieur à 10 ms), tandis que setInterval essaie à chaque fois pendant cette longue exécution de code, un rappel est exécuté. toutes les 10 ms (Note du traducteur : on peut comprendre que lors de l'exécution de ce code long, une tâche sera ajoutée à la file d'attente toutes les 10 ms, sans intervalle entre les deux).

Nous avons beaucoup appris ici, passons en revue :

Le moteur JavaScript n'a qu'un seul thread, ce qui oblige les événements asynchrones à être mis en file d'attente pour leur exécution.
setTimeout et setInterval sont fondamentalement différents dans la façon dont ils exécutent le code asynchrone.
Si le minuteur ne peut pas s'exécuter immédiatement, il sera retardé jusqu'au prochain point d'exécution possible (qui dépassera le délai requis).
Si le temps d'exécution du programme de rappel dans setInterval est suffisamment long (dépasse le délai spécifié), l'intervalle peut être exécuté sans délai (Note du traducteur : car un autre rappel sera ajouté lorsqu'un rappel n'a pas fini de s'exécuter).
Tout cela constitue une connaissance très importante pour comprendre le fonctionnement du moteur JavaScript, en particulier le grand nombre d'événements asynchrones qui se produisent, et jette les bases de la création de code d'application avancé.

Recommandations associées :

Principe de fonctionnement de la minuterie Javascript

À propos de l'analyse du principe de la minuterie 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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment créer et publier mes propres bibliothèques JavaScript? Comment créer et publier mes propres bibliothèques JavaScript? Mar 18, 2025 pm 03:12 PM

L'article discute de la création, de la publication et du maintien des bibliothèques JavaScript, en se concentrant sur la planification, le développement, les tests, la documentation et les stratégies de promotion.

Comment optimiser le code JavaScript pour les performances dans le navigateur? Comment optimiser le code JavaScript pour les performances dans le navigateur? Mar 18, 2025 pm 03:14 PM

L'article traite des stratégies pour optimiser les performances JavaScript dans les navigateurs, en nous concentrant sur la réduction du temps d'exécution et la minimisation de l'impact sur la vitesse de chargement de la page.

Que dois-je faire si je rencontre l'impression de code brouillé pour les reçus en papier thermique frontal? Que dois-je faire si je rencontre l'impression de code brouillé pour les reçus en papier thermique frontal? Apr 04, 2025 pm 02:42 PM

Des questions et des solutions fréquemment posées pour l'impression de billets thermiques frontaux pour le développement frontal, l'impression de billets est une exigence commune. Cependant, de nombreux développeurs mettent en œuvre ...

Qui est payé plus de python ou de javascript? Qui est payé plus de python ou de javascript? Apr 04, 2025 am 12:09 AM

Il n'y a pas de salaire absolu pour les développeurs Python et JavaScript, selon les compétences et les besoins de l'industrie. 1. Python peut être davantage payé en science des données et en apprentissage automatique. 2. JavaScript a une grande demande dans le développement frontal et complet, et son salaire est également considérable. 3. Les facteurs d'influence comprennent l'expérience, la localisation géographique, la taille de l'entreprise et les compétences spécifiques.

Comment déboguer efficacement le code JavaScript à l'aide d'outils de développeur de navigateur? Comment déboguer efficacement le code JavaScript à l'aide d'outils de développeur de navigateur? Mar 18, 2025 pm 03:16 PM

L'article traite du débogage efficace de JavaScript à l'aide d'outils de développeur de navigateur, de se concentrer sur la définition des points d'arrêt, de l'utilisation de la console et d'analyser les performances.

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en utilisant JavaScript? Comment fusionner les éléments du tableau avec le même ID dans un seul objet en utilisant JavaScript? Apr 04, 2025 pm 05:09 PM

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en JavaScript? Lors du traitement des données, nous rencontrons souvent la nécessité d'avoir le même ID ...

Comment utiliser les cartes source pour déboguer le code JavaScript minifié? Comment utiliser les cartes source pour déboguer le code JavaScript minifié? Mar 18, 2025 pm 03:17 PM

L'article explique comment utiliser les cartes source pour déboguer JavaScript minifiée en le mappant au code d'origine. Il discute de l'activation des cartes source, de la définition de points d'arrêt et de l'utilisation d'outils comme Chrome Devtools et WebPack.

Démystifier javascript: ce qu'il fait et pourquoi c'est important Démystifier javascript: ce qu'il fait et pourquoi c'est important Apr 09, 2025 am 12:07 AM

JavaScript est la pierre angulaire du développement Web moderne, et ses principales fonctions incluent la programmation axée sur les événements, la génération de contenu dynamique et la programmation asynchrone. 1) La programmation axée sur les événements permet aux pages Web de changer dynamiquement en fonction des opérations utilisateur. 2) La génération de contenu dynamique permet d'ajuster le contenu de la page en fonction des conditions. 3) La programmation asynchrone garantit que l'interface utilisateur n'est pas bloquée. JavaScript est largement utilisé dans l'interaction Web, les applications à une page et le développement côté serveur, améliorant considérablement la flexibilité de l'expérience utilisateur et du développement multiplateforme.

See all articles