我的javascript中有一个setinterval函数,我希望尽可能快,即每隔1ms检查一次事件的状态。是否有可能从用户的浏览器中询问太多?它似乎工作得很好,但我想知道它是否是一种不好的做法。
答案 0 :(得分:8)
这不仅是可能的,而且非常普遍。从本质上讲,这是一种竞争条件。如果依赖于在下一个间隔之前执行的回调内部的代码,请改为使用递归setTimeout
。
此外,除非您的间隔调用lockUpBrowser
,否则回调之间的持续时间可能太短,无法实现真实的性能处理。
(function myRecursiveTask() {
// Do your task here
myTask();
if (!someConditionToAllowABailOut) {
setTimeout(myRecursiveTask, 100); // 100ms loop
}
}());
答案 1 :(得分:3)
setInterval
无法保证在指定的时间间隔内执行。
它将尽快执行,但由于javasript是单线程的,并且此时可能会执行其他一些代码,因此您的回调可能会延迟。
如果你使用setInterval
1ms而不是你可能会以错误的方式解决问题。
答案 2 :(得分:1)
是的,如果传递给setInterval
的函数引用需要的时间比间隔长,那么对该函数的调用将使浏览器排队并陷入困境。如果您正在尝试执行动画并希望尽快更改每个步骤,则应使用requestAnimationFrame
函数用于现代浏览器。就个人而言,我从来不需要比每15ms
更快地执行一项功能。
答案 3 :(得分:1)
我当然会质疑这种方法的必要性。您需要检查每1ms无法检查的每10ms,100ms或每秒?
您是否100%确定每次运行的检查功能将始终在< 1ms,这样您就没有多个检查进程堆叠起来运行。
这个过程需要多少内存和CPU,你是否可能会使用户的浏览器变慢,以至于像滚动这样的操作会让用户感到痛苦?
答案 4 :(得分:0)
对你来说太慢了吗?
while (condition)
{
//code block to be executed
}
我知道我不是在回答你的问题但是,我认为没有比这更好的方法......
答案 5 :(得分:0)
Ben Cherry有一个good article关于此问题,他测试了不同的浏览器,以确定setInterval
在变得不可靠之前有多快。 setInterval
或setTimout
触发的速度取决于浏览器。
特别是,如果您在浏览器中寻找一致的计时器间隔,则必须使用> 15ms的内容。
因此,如果您可以将时间设置为大于15毫秒,则不会遇到问题。