setInterval会漂移吗?

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



ABOUTYOU
浏览 612回答 3
3回答

倚天杖

您可以在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的话,它可能会脱节,但似乎可以自行纠正。尝试将其运行更长的时间,并查看其处理方式。

皈依舞

简短的回答:不,您不能确定。是的,它会漂移。长答案:John Resig关于JavaScript时间的准确性以及JavaScript计时器的工作原理。从第二篇文章:为了了解计时器在内部的工作方式,有一个重要的概念需要探讨:不能保证计时器的延迟。由于浏览器中的所有JavaScript都在单线程上执行,因此异步事件(例如鼠标单击和计时器)仅在执行中存在空缺时才运行。这两篇文章(以及该站点上的任何内容)都很好阅读,因此请阅读。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript