Research record · v1 · 2026年8月11日

JavaScript Timer の精度:ブラウザ倒計時の状態復元ベンチマーク

固定減算、deadline - Date.now()performance.now() の単調参照を同じコールバックで比較し、 コールバック遅延・残り時間誤差・終了検知遅延を分けて公開します。

Summary

遅いコールバックと、ずれた残り時間は同じではありません

今回の固定環境では、2 つの主スレッド停止条件とも、固定減算の試行最大絶対残り時間誤差の中央値が deadline 再計算より大きくなりました。 これは公開した v1 試行だけの記述です。

一方で、deadline 再計算も JavaScript が再び実行される前に音や通知を鳴らすことはできません。 そのため表示の状態復元と、終了を検知できた時刻を別の指標として読みます。

停止条件ごとの試行最大絶対残り時間誤差(中央値)

周期的な 280 ms 停止

固定減算
881.5 ms
deadline - Date.now()
0.7 ms

終了時刻をまたぐ 900 ms 停止

固定減算
400 ms
deadline - Date.now()
0.6 ms

共通スケール。棒はコールバックが准時だったことを示しません。

Three measures

3 つの指標を混ぜずに読む

Callback lateness
名目上のコールバック順序に対して、実際の callback が何 ms 遅れて観測されたか。
Remaining-time error
同じ callback 内で、各方式の残り値が単調参照の残り値と何 ms 違ったか。
Completion-detection lateness
単調 deadline 後、各方式が最初に 0 を観測できるまで何 ms かかったか。

Results

v1 シナリオ別結果

値は有効な測定試行の記述統計です。優劣の総合点や統計的有意差は計算していません。

JavaScript timer benchmark v1 scenario results
シナリオ有効/計画Callback lateness p95固定減算 最大誤差 中央値Deadline 最大誤差 中央値固定減算 終了検知 中央値Deadline 終了検知 中央値
前景・アイドル10/102 ms2.1 ms0.7 ms1.5 ms1.5 ms
周期的な 280 ms 停止10/10802 ms881.5 ms0.7 ms801.7 ms1.4 ms
終了時刻をまたぐ 900 ms 停止10/10901.7 ms400 ms0.6 ms901.6 ms501.7 ms

推奨引用形式

Taimaa.net「JavaScript Timer の精度:ブラウザ倒計時の状態復元ベンチマーク」v1、2026年8月11日、https://taimaa.net/research/javascript-timer-accuracy#benchmark-v1-scope-and-result

33 試行の安定アンカーを表示

各アンカーは trial_id と一致します。callback 単位の値は observations.csv で監査できます。

Method & release

方法、環境、公開データ

事前に固定した実行条件

  • 間隔 100 ms、名目時間 4,000 ms。
  • 前景アイドル、800 ms ごとの 280 ms 停止、終了時刻をまたぐ 900 ms 停止。
  • 各条件はウォームアップ 1 回の後、測定 10 回。各条件 8 回以上の有効試行を必須としました。
  • wall/monotonic の相対オフセット跳変が 50 ms を超えた試行は除外。除外理由はすべて公開します。
  • 同一 callback で 1 組の Date.now() / performance.now() を読み、3 方式すべてに使いました。

実行環境

ブラウザ
Chrome/151.0.7922.108
OS
macOS 26.5.1 (25F80)
ハードウェア
Mac17,4
言語・時刻帯
zh-CN · Asia/Shanghai
Visibility
visible
Harness SHA-256
ff3b78efa2cc7fe8df9f7bfbd2bf9368ac1fc56cda03da3367c66020c971d482

普通のタイマー利用での意味

ページが重くなった後に残り時間を復元するには、callback の回数だけを減らすより、目標終了時刻から残り値を再計算する方が今回の停止条件では誤差を抑えました。 ただし、重い処理の最中に終了音や通知を准時に発火できるという意味ではありません。

制限

この v1 は固定した 1 つの Chrome / macOS / ハードウェア環境の前景試行です。 全ブラウザ、モバイル、バックグラウンドタブ、スリープ復帰、長時間運転、音・通知の開始時刻、法的または安全上重要な計時を対象にしません。Date.now() はシステム時計変更の影響を受けます。

背景資料

以下は仕様と実装上の背景資料です。Taimaa.net の実測結果そのものではありません。

版と訂正

v1 は 2026年8月11日 に作成した固定リリースです。現在、訂正はありません。 公開済みファイルは上書きせず、訂正時は旧 URL を保存したまま新しい版と変更区分を追加します。

Capture SHA-256: 4d93525e58265df70e576ae92554820a5cb6fa5030fea2dae6b96ef9585a87bf

実際のカウントダウンを使う場合は、Taimaa.net の無料オンラインタイマーに戻れます。

タイマーを使う