Event
インターフェースの timeStamp
プロパティは、特定のイベントが発生した時刻を示します。
49 より前のバージョンの Chrome では、この timeStamp
値は DOMTimeStamp
として表されていました。これは、Date.now()
によって返される値と同様に、システム エポックからのミリ秒数でした。
Chrome 49 以降、timeStamp
は DOMHighResTimeStamp
値です。この値は引き続きミリ秒数ですが、マイクロ秒の解像度になります。つまり、値には小数部分が含まれます。また、値はエポックではなく PerformanceTiming.navigationStart
(ユーザーがページに移動した時刻)を基準としています。
タイムスタンプの精度を高めることのメリットは、次の例で確認できます。
クロスブラウザと従来版に関する考慮事項
2 つのイベントの Event.timeStamp
値を比較する既存のコードがある場合、DOMHighResTimeStamp
への移行に伴ってコードを調整する必要はありません。さらに、DOMHighResTimeStamp
をサポートするブラウザでは、既存のコードはマイクロ秒単位の精度が向上し、ウェブページの実行中にシステム クロックが変更されたかどうかに関係なく、DOMHighResTimeStamp
が単調増加することが保証されます。
2 つの Event.timeStamp
値を比較するのではなく、イベントが発生してから経過した時間をコードで判断する必要がある場合は、新しい DOMHighResTimeStamp
値を performance.now()
と直接比較できます。Event.timeStamp
をシステム エポックからのミリ秒単位の絶対数に変換する必要がある場合は、DOMHighResTimeStamp
を performance.timing.navigationStart
に追加してその値を取得できます。
どちらの場合も、DOMTimeStamp
と DOMHighResTimeStamp
の動作は異なりますが、Majid Valipour 提供の変換関数を使用すると、クロスブラウザ コードを簡素化できます。Event
オブジェクトをパラメータとして受け取り、DOMHighResTimeStamp
のような値を返します。この値は、performance.now()
と比較したり、performance.timing.navigationStart
に追加したりできます。