Nicholas Zakasは、彼のブログにブラウザでのタイマー解決の素晴らしい要約を書いています。Nicholasが指摘したように、HTML5タイマーの仕様setTimeout()
(2012年8月2日現在)では、およびの最小間隔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でこのプログラムを実行すると、ティックイベントごとに約4.2ミリ秒が一貫して表示されますgoog.Timer
。これは、ブラウザの最小許容タイマー解像度である4ミリ秒に非常に近い値です。