Javascript 使用精确超时设置间隔
有没有办法使函数与setInterval一样,但每次的超时都完全相同。 在setInterval中,超时在给定的超时范围内变化,有多一点,有少一点,但非常罕见,完全相同 例如:Javascript 使用精确超时设置间隔,javascript,Javascript,有没有办法使函数与setInterval一样,但每次的超时都完全相同。 在setInterval中,超时在给定的超时范围内变化,有多一点,有少一点,但非常罕见,完全相同 例如: var before = new Date().getTime(); setInterval(function() { var after = new Date().getTime(); newTab.window.location=someURL; console.log((after - before));
var before = new Date().getTime();
setInterval(function() {
var after = new Date().getTime();
newTab.window.location=someURL;
console.log((after - before));
before = after;
}, 50000);
打印500005002、50005、50994、50997、49999、50003、49998等。
我希望总是打印50000Javascript仅在一个流中执行,因此如果有另一个进程同时执行某些操作,则计时器函数总是有可能无法及时执行 如果您确实需要确切的时间间隔,您可以提前阻止任何其他流程的执行,并希望做到最好:
function setExactInterval(handler, time) {
var startTime = Date.now();
setTimeout(function() {
while (true) {
var currentTime = Date.now();
var diff = currentTime - startTime;
if (diff >= time) {
setExactInterval(handler, time);
return handler();
}
}
}, time - 50);
}
如果进程被操作系统阻止,它仍然是不精确的…不。如果你想要精确到数千秒的东西,那么你需要一台时间机器,从未来获得它。我很难相信50994和50997的值,但所有其他值都是完全可以接受的。你为什么不告诉我们你的问题是什么,这样我们就可以帮你了?@Archer,我相信是50994。@fuyushimoya,对不起,我的错。那是个打字错误。我仍然发现有一个很难相信的结果——几乎是1秒外的结果?如果OP运行的是大量计算或dom操作,则可能会延迟
间隔函数,因为它们都使用相同的线程。还有@Hristo93,我认为没有这样的函数可以像你期望的那样发挥作用,也许你可以从中找到信息。请注意,这并不保证任何准确性,只保证最短的时间。浏览器可以也可以调节计时器,特别是在选项卡不活动等情况下。”注意:此API不能保证计时器完全按计划启动。CPU负载、其他任务等会导致延迟。谢谢,这确实帮助了我:)我刚刚意识到,我最初的答案是导致阻塞间隔每一步都增加。我编辑了解决方案以避免它。