-1

setTimeout()Windows 和 Ubuntu中给出的时间延迟不同吗?

这是为什么?

有没有更好的办法?

4

2 回答 2

2

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

有几个原因:

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

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

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

更好的方法是什么?

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

于 2013-06-19T07:07:55.280 回答
1

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

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

如果您的函数在此时间预算内运行,requestAnimationFrame那么您可以从 Javascript 访问最准确。

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

function myLoop() {

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

    requestAnimationFrame(myLoop);
}

注意:您需要在某些浏览器或 polyfill 中使用前缀(有关链接,请参见 chris 的回答)。

于 2013-06-19T07:19:11.540 回答