Timer o wysokiej rozdzielczości został dodany przez grupę roboczą WebPerf, aby umożliwić pomiary na platformie internetowej, które są dokładniejsze niż te uzyskane za pomocą +new Date
i nowszej wersji Date.now()
.
Oto przykłady wartości, które możesz otrzymać:
Date.now() // 1337376068250
performance.now() // 20303.427000007
Zauważ, że te 2 wartości różnią się o wiele rzędy wielkości. performance.now()
to wartość w milisekundach z przecinkiem dziesiętnym od momentu rozpoczęcia wczytywania danej strony (dokładnie performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart)
timeStamp). Można argumentować, że może to być liczba milisekund od epoki Unixa, ale rzadko aplikacja internetowa musi znać odległość między teraźniejszością a 1970 r. Ta liczba jest względna w stosunku do strony, ponieważ będziesz porównywać ze sobą co najmniej 2 wyniki pomiarów.
Czas monotoniczny
Kolejną zaletą jest to, że czas jest monotoniczny. Pozwólmy, aby inżynier z zespołu WebKit Tony Gentilcore wyjaśnił to zagadnienie:
Przykłady zastosowania
Oto kilka sytuacji, w których zamiast podstawowego sygnału czasowego możesz użyć zegara o wysokiej rozdzielczości:
- test porównawczy
- kod runloop gry lub animacji;
- obliczanie częstotliwości klatek z wysoką precyzją
- wywoływanie działań lub dźwięku w określonych momentach animacji lub innej sekwencji czasowej;
Dostępność
Zegar o wysokiej rozdzielczości jest obecnie dostępny w Chrome (wersja stabilna) jako window.performance.webkitNow()
. Ta wartość jest zwykle równa nowej wartości argumentu przekazanej do wywołania zwrotnego requestAnimationFrame. Wkrótce WebKit zrezygnuje z prefiksu, a ta funkcja będzie dostępna za pomocą performance.now()
. W szczególności grupa robocza WebPerfWG pod przewodnictwem Jatindera Manna z Microsoftu bardzo szybko odniosła sukces w usuwaniu prefiksów z funkcji.
Podsumowując, performance.now()
to
- podwójna precyzja z mikrosekundami w części ułamkowej.
- względem
navigationStart
strony, a nie względem epoki UNIX; - nie jest przekrzywiony, gdy zmienia się czas systemowy
- jest dostępna w Chrome w wersji stabilnej, Firefoksie w wersji 15 lub nowszej oraz IE 10.