[英]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
在变得不可靠之前有多快。 setInterval
或setTimout
触发的速度取决于浏览器。
特别是,如果您在浏览器中寻找一致的计时器间隔,则必须使用> 15ms的内容。
因此,如果您可以将时间设置为大于15毫秒,则不会遇到问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.