一尘不染

setInterval会漂移吗?

javascript

这确实是一个非常简单的问题。如果我使用setInterval(something, 1000),是否可以完全确定在31天后会触发“某事”的确切60*60*24*31时间?还是有所谓的漂移风险?


阅读 240

收藏
2020-05-01

共1个答案

一尘不染

您可以在Firefox中运行以下基准测试:

var start = +new Date();
var count = 0;
setInterval(function () {
    console.log((new Date() - start) % 1000,
    ++count,
    Math.round((new Date() - start)/1000))
}, 1000);

第一个值应尽可能接近0或1000(其他任何值都表明触发器的计时是“偏离原点”。)第二个值是代码被触发的次数,第三个值是多少次被触发可能 应该
触发了。您会注意到,如果您占用CPU的话,它可能会脱节,但似乎可以自行纠正。尝试将其运行更长的时间,并查看其处理方式。

2020-05-01