Jaki jest powód, dla którego JavaScript setTimeout jest tak niedokładny?
Mam tutaj ten kod:
var date = new Date();
setTimeout(function(e) {
var currentDate = new Date();
if(currentDate - date >= 1000) {
console.log(currentDate, date);
console.log(currentDate-date);
}
else {
console.log("It was less than a second!");
console.log(currentDate-date);
}
}, 1000);
W moim komputerze zawsze działa poprawnie, z 1000 na wyjściu konsoli. Zainteresowanie innym komputerem, tym samym kodem, wywołanie zwrotne limitu czasu rozpoczyna się w mniej niż sekundę, a różnica wynosicurrentDate - date
jest między 980 a 998.
Wiem, że istnieją biblioteki, które rozwiązują tę niedokładność (na przykładTock).
Zasadniczo moje pytanie brzmi:Jakie są przyczyny, ponieważsetTimeout
nie strzela w danym czasie? Czy może to być komputer zbyt wolny, a przeglądarka automatycznie próbuje dostosować się do powolności i wcześniej strzela?
PS: Oto zrzut ekranu kodu i wyników wykonanych w konsoli JavaScript JavaScript: