performance.now () vs Date.now ()

74

Was ist der Unterschied zwischen performance.now()und Date.now()?

Sollte ich performance.now()als Ersatz für Date.now()da performace.now()ist konsistenter und unabhängiger?

Lewis
quelle
13
Nein! Date.now()Gibt die Anzahl der seit dem 1. Januar 1970 seit 00:00:00 UTC verstrichenen Millisekunden zurück. Gibt performance.now()die Anzahl der seit einer beliebigen Epoche verstrichenen Millisekunden / Mikrosekunden zurück . Grundsätzlich performance.now()sollte nur verwendet werden, wenn Sie den relativen Abstand zwischen zwei Zeitpunkten messen möchten, nicht deren "absolute" Position in der Zeit.
user703016
2
Was @buttifulbuttefly sagt, plus ... performance.nowbietet ein präziseres Timing (Sub-Millisekunden-Genauigkeit).
Markieren Sie den
2
In der Tat, genaueres Timing , nicht genauere Zeit .
Amadan
2
@markE Das stimmt nicht mehr. Aufgrund von Spectre ist die Genauigkeit von performance.now begrenzt
user5532169

Antworten:

62

Sie dienen beide unterschiedlichen Zwecken.

performance.now()ist relativ zum Laden der Seite und genauer in Größenordnungen. Zu den Anwendungsfällen gehören Benchmarking und andere Fälle, in denen eine hochauflösende Zeit erforderlich ist, z. B. Medien (Spiele, Audio, Video usw.).

Es ist zu beachten, dass dies performance.now()nur in neueren Browsern (einschließlich IE10 +) verfügbar ist.

Date.now()ist relativ zur Unix-Epoche (1970-01-01T00: 00: 00Z) und abhängig von der Systemuhr. Zu den Anwendungsfällen gehört die Manipulation des alten Datums seit Beginn von JavaScript.

Weitere Informationen finden Sie unter Wenn Millisekunden nicht ausreichen:performance.now und nowMethode (Internet Explorer) - MSDN .

Die offizielle W3C-Spezifikation finden Sie hier: High Resolution Time API

rink.attendant.6
quelle
6
Diese Präzision ist mit Kosten verbunden. Es ist 50% langsamer. Gut zu wissen, ob Sie es in einer engen Schleife brauchen. jsperf.com/perf-vs-date/1
Eyal
2
Ups, ich meinte 80% langsamer. :-(
Eyal
1
Denken Sie daran, was Google Audits über date.now () developer.google.com/web/tools/lighthouse/audits/date-now
StLia
1
Derzeit in Firefox ist performance.now () um 20% schneller, in anderen Browsern jedoch um 60% schneller - Sie können es selbst überprüfen: jsbench.me/s6jz9v29i3/1
Picard
1
3x langsamer auf meinem Raspberry Firefox. performance.now () scheint nicht performant zu sein, ist aber genauer. Ein paar hundert Maßnahmen wirken sich ohnehin nicht auf die Leistung aus.
21

Date.now()Gibt die Anzahl der seit dem 1. Januar 1970 00:00:00 UTC verstrichenen Millisekunden zurück. Gibt performance.now()die Anzahl der Millisekunden mit Mikrosekunden im Bruchteil vom performance.timing.navigationStartBeginn der Navigation des Dokuments bis zum performance.now()Aufruf zurück. Ein weiterer wichtiger Unterschied zwischen Date.now()und performance.now()besteht darin, dass letzterer monoton zunimmt, sodass der Unterschied zwischen zwei Anrufen niemals negativ sein wird.

Zum besseren Verständnis besuchen Sie den Link .

Traumweber
quelle