为了账号安全,请及时绑定邮箱和手机立即绑定

setInterval会漂移吗?

setInterval会漂移吗?

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

3 回答

?
倚天杖

TA贡献1828条经验 获得超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的话,它可能会脱节,但似乎可以自行纠正。尝试将其运行更长的时间,并查看其处理方式。


查看完整回答
反对 回复 2019-11-02
?
皈依舞

TA贡献1851条经验 获得超3个赞

简短的回答:不,您不能确定。是的,它会漂移。


长答案:John Resig关于JavaScript时间的准确性以及JavaScript计时器的工作原理。


从第二篇文章:


为了了解计时器在内部的工作方式,有一个重要的概念需要探讨:不能保证计时器的延迟。由于浏览器中的所有JavaScript都在单线程上执行,因此异步事件(例如鼠标单击和计时器)仅在执行中存在空缺时才运行。


这两篇文章(以及该站点上的任何内容)都很好阅读,因此请阅读。


查看完整回答
反对 回复 2019-11-02
  • 3 回答
  • 0 关注
  • 611 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号