Heim > Web-Frontend > js-Tutorial > Wie kann ich genaue JavaScript-Timer erstellen, die Abweichungen vermeiden?

Wie kann ich genaue JavaScript-Timer erstellen, die Abweichungen vermeiden?

Linda Hamilton
Freigeben: 2024-12-14 16:01:12
Original
526 Leute haben es durchsucht

How Can I Create Accurate JavaScript Timers That Avoid Drifting?

Genaue JavaScript-Timer erstellen

Timer spielen in JavaScript eine entscheidende Rolle für die Planung von Aufgaben und die Implementierung von Echtzeitfunktionen. Aufgrund der asynchronen Natur der JavaScript-Ausführung kann es jedoch schwierig sein, die Genauigkeit von Timern sicherzustellen.

Ungenauigkeit von setInterval/setTimeout

Das von Ihnen bereitgestellte Codefragment verwendet die setInterval-Funktion, um jeweils einen Zähler zu erhöhen zweite. Sie haben jedoch beobachtet, dass der Zähler nach 3600 Sekunden nur noch etwa 3500 Sekunden erreichte. Dies liegt daran, dass setInterval und setTimeout nicht von Natur aus genau sind. Sie neigen zu Verzögerungen und Abweichungen im Laufe der Zeit.

Genaues Timing mit dem Datumsobjekt

Um einen genauen Timer zu erstellen, wird empfohlen, stattdessen das Datumsobjekt zu verwenden. Mit dem Date-Objekt können Sie die aktuelle Uhrzeit mit Millisekundengenauigkeit ermitteln. Sie können die Logik Ihres Timers auf der Differenz zwischen der aktuellen Zeit und einer Startzeit basieren, etwa so:

var start = Date.now();
setInterval(function() {
    var delta = Date.now() - start; // milliseconds elapsed since start
    ...
    output(Math.floor(delta / 1000)); // in seconds
}, 1000); // update about every second
Nach dem Login kopieren

Selbstjustierende Timer

Für Timer-Anwendungen, die ein konstantes Intervall ohne Abweichungen erfordern , selbsteinstellende Timer sind eine bessere Option. Sie passen die Verzögerung zwischen den Timeouts dynamisch an die tatsächlich verstrichene Zeit an. Dieser Ansatz stellt sicher, dass der Timer auf dem richtigen Weg bleibt:

var interval = 1000; // ms
var expected = Date.now() + interval;
setTimeout(step, interval);
function step() {
    var dt = Date.now() - expected; // the drift (positive for overshooting)
    ... // do what is to be done
    expected += interval;
    setTimeout(step, Math.max(0, interval - dt)); // take into account drift
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich genaue JavaScript-Timer erstellen, die Abweichungen vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage