setInterval()が厳密な時間なのか調べてみよう。
私のデジタル時計で、2秒分進めた(あるいは進まなかった)「オーバークロック」を検知してみよう。
setInterval(() => {
const beforeSecond = date.getSeconds();
date.setTime(Date.now());
if (beforeSecond - (date.getSeconds() - 1) < 0) {
console.warn("UnderClocking Detected");
} else if (
beforeSecond - (date.getSeconds()) - 1 > 0 &&
beforeSecond - (date.getSeconds()) - 1 < 30
) {
console.warn("OverClocking Detected");
}
}, 1000);っで、そんなことは起きなかった。
1000ms間隔での実行では、それぞれのイテレーションの誤差はぐらい。
その誤差は蓄積することはない。
setInterval()内の処理がいかに重かろうが、基本的にCPUがビジー状態になるレベルの重さでない限りは、誤差が蓄積することはなかった。
setInterval()内の処理は非同期であり、その実行タイミングは独立して管理されてる。