Sygnatury czasowe zdarzeń o wysokiej rozdzielczości

Właściwość timeStamp interfejsu Event wskazuje, kiedy wystąpiło dane zdarzenie.

W wersjach Chrome starszych niż 49 wartość timeStamp była reprezentowana jako DOMTimeStamp, czyli liczba całkowita w milisekundach od epoki systemowej, podobnie jak wartość zwracana przez Date.now().

Począwszy od wersji 49 Chrome timeStamp to wartość DOMHighResTimeStamp. Ta wartość jest nadal liczbą w milisekundach, ale z dokładnością do mikrosekund, co oznacza, że zawiera część dziesiętną. Dodatkowo zamiast wartości względnej do ery, wartość jest względna do PerformanceTiming.navigationStart, czyli czasu, w którym użytkownik przeszedł na stronę.

Zalety dodatkowej dokładności sygnatury czasowej można zobaczyć na przykład w tych przypadkach:

Zagadnienia związane z obsługą w różnych przeglądarkach i starszymi wersjami

Jeśli masz kod, który porównuje wartości Event.timeStamp z 2 zdarzeń, nie musisz go dostosowywać z powodu zmiany na DOMHighResTimeStamp. Co więcej, w przeglądarkach, które obsługują funkcję DOMHighResTimeStamp, Twój dotychczasowy kod skorzysta z zwiększonej dokładności do mikrosekund, a także z tego, że wartość DOMHighResTimeStamp będzie monotonicznie rosnąć, niezależnie od tego, czy zegar systemowy zmieni się w trakcie wykonywania strony internetowej.

Jeśli zamiast porównywać 2 wartości Event.timeStamp Twój kod musi określić, jak dawno temu miało miejsce zdarzenie, nową wartość DOMHighResTimeStamp można porównać bezpośrednio z wartością performance.now(). Jeśli chcesz przekształcić Event.timeStamp w bezwzględną liczbę milisekund od początku ery systemu, możesz uzyskać tę wartość, dodając DOMHighResTimeStamp do performance.timing.navigationStart.

W obu tych przypadkach funkcje DOMTimeStampDOMHighResTimeStamp działają inaczej, ale możesz uprościć kod w różnych przeglądarkach, używając tej funkcji konwersji, którą udostępnił Majid Valipour. Jako parametr przyjmuje obiekt Event i zwraca wartość podobną do DOMHighResTimeStamp, którą można porównać z wartością performance.now() lub dodać do performance.timing.navigationStart.