2015-06-12 10 views
20

Jaka jest różnica między performance.now() i Date.now()?performance.now() vs Date.now()

Czy powinienem rozważyć performance.now() jako zamiennik dla Date.now(), ponieważ performace.now() jest bardziej spójny i niezależny?

+4

Nie! 'Date.now()' zwraca liczbę milisekund, które upłynęły od 1 stycznia 1970 00:00:00 UTC, 'performance.now()' zwraca liczbę milisekund/mikrosekund, które minęły od * arbitralnej epoki *. Zasadniczo, 'performance.now()' powinno być używane tylko wtedy, gdy chcesz zmierzyć względną odległość pomiędzy dwoma punktami czasowymi, a nie ich "absolutną" pozycję w czasie. –

+2

Co mówi @buttifulbuttefly, plus ... 'performance.now' oferuje dokładniejszy pomiar czasu (precyzja poniżej milisekundy). – markE

+1

Rzeczywiście, bardziej precyzyjne * taktowanie *, nie bardziej precyzyjne * czas *. – Amadan

Odpowiedz

13

Oba służą różnym celom.

performance.now() to w stosunku do ładowania strony i bardziej precyzyjny w rzędach wielkości. Przypadki użycia obejmują testy porównawcze i inne przypadki, w których wymagany jest czas w wysokiej rozdzielczości, np. Multimedia (gry, audio, wideo itp.).

Należy zauważyć, że performance.now() jest dostępny tylko w nowszych przeglądarkach (w tym IE10 +).

Date.now() jest w stosunku do epoki Unix (1970-01-01T00: 00: 00Z) i zależy od zegara systemowego. Przypadki użycia obejmują tę samą starą manipulację datą od początku JavaScript.

Aby uzyskać więcej informacji, zobacz numery When milliseconds are not enough: performance.now i now method (Internet Explorer) - MSDN.

Oficjalna specyfikacja W3C można znaleźć tutaj: High Resolution Time API

+1

Ta precyzja ma swój koszt. Jest o 50% wolniejsze. Dobrze wiedzieć, czy potrzebujesz go w ciasnej pętli. https://jsperf.com/perf-vs-date/1 – Eyal

+1

Ups, miałem na myśli 80% wolniej. :-( – Eyal

+0

Należy pamiętać, co kontrole google myśleć o date.now() https://developers.google.com/web/tools/lighthouse/audits/date-now – StLia

4

Date.now() zwraca liczbę milisekund, jaki upłynął od 1 stycznia 1970 r 00:00:00 UTC, performance.now() zwraca liczbę milisekund, z mikrosekund w części ułamkowej, od performance.timing.navigationStart, początek nawigacji dokumentu, do połączenia performance.now(). Inną ważną różnicą między Date.now() i performance.now() jest to, że te ostatnie są monotonicznie rosnące, więc różnica między dwoma połączeniami nigdy nie będzie ujemna.

Aby uzyskać więcej informacji, odwiedź stronę link.