Minutnik w wysokiej rozdzielczości został dodany przez grupę roboczą WebPerf, aby umożliwić pomiar w usłudze internetowej bardziej precyzyjnie niż w przypadku rozwiązań +new Date
i nowszych urządzeń Date.now()
.
Dla porównania: oto wartości, które uzyskasz:
Date.now() // 1337376068250
performance.now() // 20303.427000007
Zauważysz, że 2 powyższe wartości znacznie się od siebie różnią. performance.now()
to miara czasu zmiennoprzecinkowa w milisekundach od momentu rozpoczęcia wczytywania danej strony (sygnatura czasowa performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart)
w przypadku konkretnej daty). Można stwierdzić, że jest to liczba milisekund od epoki uniksowej, ale rzadko trzeba znać odległość między rokiem 1970 a 1970. Liczba ta nie zmienia się, ponieważ porównujesz ze sobą co najmniej dwa pomiary.
Czas mononotyczny
Kolejną zaletą jest to, że czas jest monotonny. Pozwólmy, że inżynier WebKit Tony Gentilcore opowie o tym:
Przykłady zastosowania
Jest kilka sytuacji, w których zamiast korzystać z podstawowej sygnatury czasowej warto użyć licznika czasu w wysokiej rozdzielczości:
- test porównawczy
- kod pętli gry lub animacji
- precyzyjne obliczanie liczby klatek na sekundę
- podpowiedzi lub ścieżki dźwiękowe, które mają wystąpić w określonych punktach animacji lub innej sekwencji czasowej;
Dostępność
Stoper w wysokiej rozdzielczości jest obecnie dostępny w Chrome (wersja stabilna) jako window.performance.webkitNow()
. Ta wartość jest ogólnie równa nowej wartości argumentu przekazywanej do wywołania zwrotnego requestAnimationFrame. Wkrótce WebKit usunie prefiks i będzie można z niego korzystać w performance.now()
. W szczególności w programie WebPerfWG, którym kierowała Jatinder Mann z firmy Microsoft, dość szybko udało się usunąć prefiks swoich funkcji.
Podsumowując, performance.now()
to...
- podwójna z mikrosekundami w ułamku
- względem
navigationStart
strony, a nie czasu uniksowego - nie są zniekształcone przy zmianie czasu systemowego
- dostępne w przeglądarkach Chrome stabilnej, Firefox 15 i nowszych oraz IE10.