比setTimeout()更有效的方法

时间:2013-06-19 05:44:07

标签: javascript jquery performance

setTimeout()中给出的时间延迟对Windows和Ubuntu的工作方式有所不同?

为什么?

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

无法保证setTimeout()中给出的时间。

有几个原因:

  • JavaScript的eventQueue系统
  • 定时器的准确度取决于操作系统和/或浏览器(介于1ms和20ms之间)

我在

写了一篇关于时间的博客文章

http://www.codebullets.com/is-time-relative-in-javascript-1365 关于这个话题

更好的方式?

这取决于你想做什么。另请查看RequestAnimationFrame(http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/),也许这适合您。

答案 1 :(得分:1)

如果在下一个VBLANK之前请求,

requestAnimationFrame 触发每个监视器VBLANK间隙。

这是一个非常准确的计时器。但是,它每秒触发最多60次,如果您在需要再次呼叫之前花费超过16.7ms的时间预算,则不会非常准确。

如果您的功能在此时间预算范围内运行,requestAnimationFrame将是最准确的,您可以从Javascript访问。

它的触发方式与setTimeout几乎相同:

function myLoop() {

    //... < 16.7ms to finish work...

    requestAnimationFrame(myLoop);
}

注意:您需要在某些浏览器或polyfill中使用前缀(请参阅chris的答案以获取链接)。