1. ホーム
  2. javascript

[解決済み] JavaScriptでマイクロ秒のタイミングを計る

2022-10-23 02:34:04

質問

JavaScriptでマイクロ秒の分解能を持つタイミング関数はありますか?

私が知っているのは timer.js のような他のフレンドリーなブラウザ、Firefox、Safari、Opera、Epiphany、Konqueror、などのためのソリューションがあることを期待しています。 私はどの IE もサポートすることに興味はありませんが、回答は を含む IE を含む回答は歓迎されます。

(JSにおけるミリ秒単位のタイミングの精度の低さを考えると、この件に関しては期待しない!)

更新: timer.js はマイクロ秒の解像度を宣伝していますが、それは単にミリ秒の読み取りを 1,000 倍するだけです。 テストとコード検査で確認済み。 ガッカリです :[

どうすれば解決するのか?

Mark Rejhon の回答で言及されているように、最新のブラウザには、サブミリ秒の解像度のタイミング データをスクリプトに公開する API があります。 W3C 高解像度タイマー で、別名 window.performance.now() .

now() は、従来の Date.getTime() よりも優れています。

  1. now() はサブミリ秒の解像度を持つ double で、ページのナビゲーションが始まってからのミリ秒数を表します。 これは、端数のマイクロ秒の数を返します(例えば、1000.123の値は1秒と123マイクロ秒です)。

  2. now() は単調に増加する。 これは Date.getTime() おそらく は、その後の呼び出しで前方または後方にジャンプする可能性もあります。 注目すべきは、OS のシステム時刻が更新された場合です (原子時計同期など)。 Date.getTime() も更新されます。 now() は常に単調増加することが保証されているので、OS のシステム時刻の影響を受けません -- 常に壁時計の時刻になります (壁時計が原子時計でないと仮定して...)。

now() が使用するほとんどの場所で使用することができます。 new Date.getTime() , + new DateDate.now() があります。 ただし、例外として Datenow() は混ざらないので Date unix-epoch (1970年からのミリ秒数)、一方 now() はページのナビゲーションが始まってからのミリ秒数です (したがって、これは Date ).

now() は、Chrome stable、Firefox 15+、IE10でサポートされています。 また、いくつかの ポリフィル も利用可能です。

注意 を使用する場合 ウェブワーカー を使用する場合は window 変数は利用できませんが、その場合でも performance.now() .