比setTimeout()更有效的方法

More efficient way other than setTimeout()

本文关键字:有效 方法 setTimeout      更新时间:2023-09-26

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

为什么?

有更好的方法吗?

setTimeout()给出的时间不能保证。

有以下几个原因:

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

我写了一篇关于JavaScript时间的博文在

http://www.codebullets.com/is -时间-相对javascript - 1365关于本主题

更好的方法是什么?

这取决于你想做什么。也看看RequestAnimationFrame (http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/),也许这是为你。

requestAnimationFrame 触发每个监视器VBLANK间隙,如果在下一个VBLANK之前请求。

这样它就是一个非常精确的计时器。然而,它每秒最多触发60次,如果你在需要再次调用它之前花费超过16.7毫秒的时间预算,它就不会非常准确。

如果你的函数在这个时间预算内运行,requestAnimationFrame将是最准确的,你可以从Javascript访问。

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

function myLoop() {
    //... < 16.7ms to finish work...
    requestAnimationFrame(myLoop);
}

注意:你将需要使用前缀在某些浏览器或polyfill(见克里斯的回答链接)。