イベントの高解像度タイムスタンプ

Event インターフェースの timeStamp プロパティは、特定のイベントが発生した時刻を示します。

49 より前のバージョンの Chrome では、この timeStamp 値は DOMTimeStamp として表されていました。これは、Date.now() によって返される値と同様に、システム エポックからのミリ秒数でした。

Chrome 49 以降、timeStampDOMHighResTimeStamp 値です。この値は引き続きミリ秒数ですが、マイクロ秒の解像度になります。つまり、値には小数部分が含まれます。また、値はエポックではなく PerformanceTiming.navigationStart(ユーザーがページに移動した時刻)を基準としています。

タイムスタンプの精度を高めることのメリットは、次の例で確認できます。

クロスブラウザと従来版に関する考慮事項

2 つのイベントの Event.timeStamp 値を比較する既存のコードがある場合、DOMHighResTimeStamp への移行に伴ってコードを調整する必要はありません。さらに、DOMHighResTimeStamp をサポートするブラウザでは、既存のコードはマイクロ秒単位の精度が向上し、ウェブページの実行中にシステム クロックが変更されたかどうかに関係なく、DOMHighResTimeStamp単調増加することが保証されます。

2 つの Event.timeStamp 値を比較するのではなく、イベントが発生してから経過した時間をコードで判断する必要がある場合は、新しい DOMHighResTimeStamp 値を performance.now() と直接比較できます。Event.timeStamp をシステム エポックからのミリ秒単位の絶対数に変換する必要がある場合は、DOMHighResTimeStampperformance.timing.navigationStart に追加してその値を取得できます。

どちらの場合も、DOMTimeStampDOMHighResTimeStamp の動作は異なりますが、Majid Valipour 提供の変換関数を使用すると、クロスブラウザ コードを簡素化できます。Event オブジェクトをパラメータとして受け取り、DOMHighResTimeStamp のような値を返します。この値は、performance.now() と比較したり、performance.timing.navigationStart に追加したりできます。