尼古拉斯Zakas在他的博客中寫道起來Timer resolution in browsers一個很好的總結。正如Nicholas指出的那樣,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毫秒的最小允許瀏覽器計時器的分辨率大約4.2毫秒。
'goog.Timer'包裝原生'setInterval',它本身可能不夠快,無法在1 ms內運行你的函數。你確定你需要那麼多粒度嗎? 1ms輪詢是殘酷的。你不能使用'goog.events.listen'和'dispatchEvent'? – hyperslug 2012-08-05 05:15:14
謝謝,我不需要1ms的粒度。 20-100ms會很好。 – dangerChihuahua007 2012-08-05 05:16:54