这确实是一个非常简单的问题。如果我使用setInterval(something, 1000),是否可以完全确定在31天后会触发“某事”的确切60*60*24*31时间?还是有所谓的漂移风险?
setInterval(something, 1000)
60*60*24*31
您可以在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的话,它可能会脱节,但似乎可以自行纠正。尝试将其运行更长的时间,并查看其处理方式。