Kiedy milisekundy to za mało – wydajność.now

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.