gpt4 book ai didi

timer - 我怎样才能让 goog.Timer 更精确?

转载 作者:行者123 更新时间:2023-12-04 05:36:55 27 4
gpt4 key购买 nike

我做了一个 goog.Timer对象 ( http://closure-library.googlecode.com/svn/docs/class_goog_Timer.html ) 与 new goog.Timer(1)通过监听滴答事件每毫秒运行一个函数。但是,该函数似乎每 100 毫秒运行一次。

我假设我的函数需要一段时间才能运行(当然 javascript 是单线程的),所以需要一段时间才能进入下一轮。因此,我将计时器的间隔设置为 100,并且它每 1/10 秒可靠地运行一次。

Google Closure 库是否有一个更可靠的计时器,它只在间隔内精确地运行一个函数?如果没有足够的时间在一个周期内运行一个函数,我可以取消前一个调用并在下一次调度滴答时运行它。

最佳答案

Nicholas Zakas 写了一篇很好的总结 Timer resolution in browsers 在他的博客上。正如尼古拉斯所指出的,HTML5 timers specification (截至 2012 年 8 月 2 日)规定 setTimeout() 的最小间隔和 setInterval()是 4 毫秒。

我编写了以下演示应用程序来测试 goog.Timer 的最小间隔延迟.

<!doctype html>
<html>
<head>
<title>goog.Timer Test</title>
<script src="../closure-library/closure/goog/base.js"></script>
</head>
<body>

<h1>goog.Timer Test</h1>

<div id="mainContent"></div>

<script>
goog.require('goog.Timer');
</script>
<script>
var tickCount = 0;
var timer = new goog.Timer(1);
var mainDiv = document.querySelector('#mainContent');

/**
* Tick callback.
*/
var tickCounter = function() {
tickCount++;
if (tickCount % 1000 === 0) {
var timeElapsed = goog.now() - startTime;
mainDiv.innerHTML = 'goog.Timer tick events: ' + tickCount +
'<br>actual elapsed milliseconds: ' + timeElapsed +
'<br>milliseconds per goog.Timer tick: ' + timeElapsed/tickCount;
}
};

startTime = goog.now();
timer.start();
goog.events.listen(timer, goog.Timer.TICK, tickCounter);
</script>
</body>
</html>

在 Chrome 版本 21 中运行此程序始终显示每 goog.Timer 大约为 4.2 毫秒滴答事件,非常接近允许的最小浏览器计时器分辨率 4 毫秒。

关于timer - 我怎样才能让 goog.Timer 更精确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11813922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com