Maison > interface Web > js tutoriel > Comment puis-je créer des minuteries précises en JavaScript ?

Comment puis-je créer des minuteries précises en JavaScript ?

Barbara Streisand
Libérer: 2024-12-25 07:19:33
original
151 Les gens l'ont consulté

How Can I Create Accurate Timers in JavaScript?

Création de minuteries précises en JavaScript

Déterminer des intervalles de temps précis en JavaScript peut être difficile en raison de la nature imprécise de setTimeout() et setInterval( ).

Inexactitude de setTimeout() et setInterval()

setTimeout() et setInterval() s'appuient sur les mécanismes de planification du navigateur, qui peuvent être influencés par les ressources système et l'activité du navigateur. Cette variabilité inhérente peut conduire à des incohérences et à un timing peu fiable, comme le démontre l'exemple donné.

Solution : Utiliser l'objet Date

Pour créer des minuteries précises, envisagez d'utiliser l'objet Date. La méthode now() de l'objet pour récupérer l'horodatage actuel en millisecondes. Cette approche offre une meilleure précision par rapport aux méthodes basées sur le rappel.

Implémentation simple de la minuterie :

Pour les scénarios de synchronisation de base, vous pouvez suivre explicitement le décalage horaire en utilisant l'approche suivante :

var start = Date.now();
setInterval(function() {
    var delta = Date.now() - start; // milliseconds since start
    ...
    output(Math.floor(delta / 1000)); // in seconds
}, 1000);
Copier après la connexion

Cette méthode suit le décalage horaire depuis le début du chronomètre. Pour éviter les sauts de valeur potentiels, il est recommandé de mettre à jour l'intervalle plus fréquemment (par exemple toutes les 100 ms).

Minuteries auto-ajustables

Pour des intervalles précis et sans dérive, vous pouvez mettre en œuvre des minuteries auto-ajustables. Ces minuteries adaptent le délai pour chaque expiration répétée en fonction du temps réellement écoulé :

var interval = 1000; // ms
var expected = Date.now() + interval;
setTimeout(step, interval);
function step() {
    var dt = Date.now() - expected; // drift
    ...
    expected += interval;
    setTimeout(step, Math.max(0, interval - dt)); // adjust delay for drift
}
Copier après la connexion

Cette approche surveille la dérive temporelle et compense toute incohérence, garantissant une cadence de synchronisation plus précise.

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