繁体   English   中英

是否可以将“setInterval”设置得太快?

[英]Is it possible to have “setInterval” set too fast?

我在我的javascript中有一个setinterval函数,我希望尽可能快,即每隔1ms检查一次事件的状态。 是否有可能从用户的浏览器中询问太多? 它似乎工作得很好,但我想知道它是否是一个不好的做法。

它不仅可能,而且很常见。 从本质上讲,这是一种竞争条件。 如果依赖于在下一个时间间隔之前执行的回调内部的代码,请改为使用递归setTimeout

此外,除非您的间隔被称为lockUpBrowser ,否则回调之间的持续时间可能太短,无法实现性能处理。

(function myRecursiveTask() {
    // Do your task here
    myTask();

    if (!someConditionToAllowABailOut) {
        setTimeout(myRecursiveTask, 100); // 100ms loop
    }
}());

setInterval不能保证在指定的时间间隔内执行。 它将尽快执行,但由于javasript是单线程的,并且此时可能会执行其他一些代码,因此您的回调可能会延迟。

如果你使用setInterval 1ms而不是你可能试图以错误的方式解决你的问题。

是的,如果传递给setInterval的函数引用比间隔执行的时间更长,则对该函数的调用将使浏览器排队并陷入困境。 如果您正在尝试执行动画并希望尽快更改每个步骤,则应该有一个requestAnimationFrame函数应该用于现代浏览器。 就个人而言,我从来不需要比每15ms更快地执行一项功能。

我当然会质疑这种方法的必要性。 您需要每1ms检查一次,每10ms,100ms或每秒检查一次?

您是否100%确定每次运行的检查功能将始终在<1ms内执行,这样您就不会有多个检查进程堆叠起来运行。

这个过程需要多少内存和CPU,你是否可能会使用户的浏览器变慢,以至于像滚动这样的操作会让用户感到痛苦?

对你来说,一段时间的循环太慢了?

while (condition)
  {
  //code block to be executed
  }

我知道我不是在回答你的问题但是,我认为没有比这更好的方法了...

Ben Cherry有一篇很好的文章 ,他在那里测试不同的浏览器,以找出setInterval在变得不可靠之前有多快。 setIntervalsetTimout触发的速度取决于浏览器。

特别是,如果您在浏览器中寻找一致的计时器间隔,则必须使用> 15ms的内容。

因此,如果您可以将时间设置为大于15毫秒,则不会遇到问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM