我正在设计一款可以在非常低规格的机器上运行的应用程序......我需要它尽可能高效..
我需要每秒发出大约10个时间间隔,只是进行ajax调用..然后做一些添加/删除类(并将其视为SERVER状态监视器)
我知道在FLASH中(好的旧闪存日)有很多间隔可能会导致处理器激增..所以我非常保守,以前在AS 2.0中发布setIntervals。
我想知道这与JS的情况是否相同?或者JS是否可以运行一系列间隔(执行轻量级任务)?我注意到很多网站都这样做,甚至facebook都有大量的间隔运行,加载脚本等等。
哦,在一个时间间隔内,我想在50ms运行它(它作为status.php链接加载)......这个好吗?
我可以优化我的间隔调用,没问题,但我只是想知道JS中“重”或“轻”的背景间隔是多少......
全部谢谢
答案 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