Heim  >  Artikel  >  Web-Frontend  >  Lösung für das Problem ungenauer setInterval timer_javascript-Fähigkeiten

Lösung für das Problem ungenauer setInterval timer_javascript-Fähigkeiten

WBOY
WBOYOriginal
2016-05-16 16:49:102284Durchsuche

Wenn Sie in js planen, setInterval für Countdown, Timing und andere Funktionen zu verwenden, ist dies oft ungenau, da die Rückruffunktion von setInterval nicht sofort nach Ablauf der Zeit ausgeführt wird, sondern erst ausgeführt wird, nachdem die Systemrechenressourcen inaktiv sind. Und die nächste Triggerzeit beginnt zu zählen, nachdem die Rückruffunktion setInterval ausgeführt wurde. Wenn also die in setInterval durchgeführten Berechnungen zu zeitaufwändig sind oder andere zeitaufwändige Aufgaben ausgeführt werden, wird das Timing von setInterval immer ungenauer und die Verzögerung wird schwerwiegend sein.

Der folgende Code kann dieses Problem veranschaulichen

Kopieren Sie den Code Der Code lautet wie folgt:

var startTime = new Date().getTime();
var count = 0;
//Zeitraubende Aufgabe
setInterval(function(){
var i = 0;
while(i < 100000000);
setInterval(function(){
console.log(new Date()). getTime() - (startTime count * 1000)) ; >



Code kopieren


Der Code lautet wie folgt:
176 340 495 652 807
961
1114
1268
1425
1579
1734
1888
2048
2201
2357
2521
2679
2834
2996
.. ....


Man sieht, dass die Verzögerung immer schwerwiegender wird

In Um eine relativ genaue Timing-Funktion in js zu verwenden, können wir



Code kopieren


Der Code lautet wie folgt:}, 0);
function failed() {
var offset = new Date().getTime() - (startTime count * 1000); = 1000 - offset;
if (nextTime < 0) nextTime = 0;
setTimeout(fixed, nextTime);

console.log(new Date().getTime() - (startTime count * 1000));
}
setTimeout(fixed, 1000);


Im Code wird die Differenz zwischen der aktuellen Zeit und der genauen Zeit von 1000 subtrahiert (das heißt). , die Zykluszeit), um die nächste Triggerzeit zu berechnen und so die aktuelle Triggerverzögerung zu korrigieren

Unten ist die Ausgabe




Code kopieren


Der Code lautet wie folgt:

186 200 230 271 158 899 900
899
900
899
899
899
902
899
418
202
232
266
145
174
192
214
242
268
149
179
214
.....


Es ist zu erkennen, dass die Die Auslösezeit ist nicht absolut genau, da jeder Auslöser rechtzeitig korrigiert wird und es zu keiner Anhäufung von Fehlern kommt.
Stellungnahme:
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