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()内の処理は非同期であり、その実行タイミングは独立して管理されてる。