是Javascript的setInterval循环资源猪吗?

时间:2014-08-22 04:13:04

标签: javascript jquery setinterval intervals

我正在设计一款可以在非常低规格的机器上运行的应用程序......我需要它尽可能高效..

我需要每秒发出大约10个时间间隔,只是进行ajax调用..然后做一些添加/删除类(并将其视为SERVER状态监视器)

我知道在FLASH中(好的旧闪存日)有很多间隔可能会导致处理器激增..所以我非常保守,以前在AS 2.0中发布setIntervals。

我想知道这与JS的情况是否相同?或者JS是否可以运行一系列间隔(执行轻量级任务)?我注意到很多网站都这样做,甚至facebook都有大量的间隔运行,加载脚本等等。

哦,在一个时间间隔内,我想在50ms运行它(它作为status.php链接加载)......这个好吗?

我可以优化我的间隔调用,没问题,但我只是想知道JS中“重”或“轻”的背景间隔是多少......

全部谢谢

3 个答案:

答案 0 :(得分:3)

每秒10个间隔意味着每100毫秒拨打一个电话不应该是我认为的问题,但如果你问我,我会每隔 250ms 拨打一个电话。两者之间差别不大用户会注意到。

还要确保有一种机制可以处理来自服务器的长时间运行响应(如果有延迟)并在有拖动时停止间隔触发。

答案 1 :(得分:2)

作为一种个人感觉,我倾向于setTimeout而不是setInterval - 至于我根本不使用setInterval

您可能遇到的问题是,如果一个过程花费的时间超过了应该的时间 - 让我给您一个想象的情况:

window.setInterval(takes100msToRun, 50);
window.setInterval(takes50msToRun, 50);
window.setInterval(takes20msToRun, 50);

问题是第一个时间间隔将比它应该花费更长时间,因此后两个时间间隔请求现在已经落后,浏览器将尝试通过尽快运行它们来赶上它们。第二个间隔需要50毫秒,所以当第三个间隔到达时,它仍然在后面运行。

这会造成一种丑陋的情况,可能导致很多拖累。

另一方面,如果你设置了Timeout,那么你就不会说“每50毫秒运行一次”,而是“从我们完成后再运行这50毫秒中的另一个。” (当然,假设这些函数设置了另一个setTimeout来重新执行。)

对于需要良好时钟时序的东西来说,这绝对是垃圾,但它对其他一切都有优势。

答案 2 :(得分:0)

setTimeout和setInterval会影响性能,但很少。

由于在浏览器中触发/侦听/运行大量功能。

即使像移动鼠标这样的微小操作也能得到这个答案,有数千个事件被触发,数十个功能开始运行。

不要使用setInterval。事实上,图书馆下划线也没有使用它。

了解如何在没有setInterval的情况下实现_.throttle。

http://learningcn.com/underscore/docs/underscore.html#section-66