JavaScript: setIntervalの精度(正確性)を検証してみる

JavaScriptのsetIntervalメソッドは実行間隔をミリ秒単位で指定できますが、 その正確性は保証されていません

どれくらいズレるのか、その精度(正確性)を検証してみます。

検証用のコードは次の通りです。 setIntervalメソッドを「1000」ミリ秒(1秒)間隔で実行し、 「本来実行すべき時刻」と「実際に実行した時刻」 の間にどれくらいの差が生じるかを表示します。

let dt = Date.now();

setInterval(function(){

	dt += 1000;
	console.log(Date.now() - dt); // 差を表示
}, 1000);

実行結果は次の通りです。(ミリ秒単位でのズレが表示されています)

実行結果
15
20
35
37
41
46
47
50
54
64
67
73
86
94
112
115
129
136
138
141
143
158
162
168

どれぐらいズレるかは毎回異なりますが、 だいたい「5ミリ秒」から「15ミリ秒」ぐらいの ズレが発生していて、それが蓄積されていきます。

上の検証結果では15回目の実行時に 「100ミリ秒(0.1秒)」以上のズレになっています。

setIntervalメソッドを利用して タイマー機能を実装するような場合は、 このズレが許容範囲かどうかを考慮する必要があります。

setIntervalのズレが許容範囲でない場合は、 setTimeoutメソッドを使ったタイマー機能の実装をおすすめします。

JavaScript入門