performance.now() vs. Date.now()

Lesezeit: 5 Minuten

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

Soll ich überlegen performance.now() als Ersatz für Date.now() seit performace.now() ist konsequenter und unabhängiger?

  • Nein! Date.now()gibt die Anzahl der Millisekunden zurück, die seit dem 1. Januar 1970 00:00:00 UTC vergangen sind, performance.now() gibt die Anzahl der seither verstrichenen Millisekunden/Mikrosekunden zurück eine beliebige Epoche. Grundsätzlich, performance.now() sollte nur verwendet werden, wenn Sie die relative Entfernung zwischen zwei Zeitpunkten messen möchten, nicht ihre “absolute” Position in der Zeit.

    – Benutzer703016

    12. Juni 2015 um 4:59 Uhr


  • Was @buttifulbuttefly sagt, plus … performance.now bietet ein präziseres Timing (Unter-Millisekunden-Präzision).

    – markE

    12. Juni 2015 um 4:59 Uhr


  • Genauer gesagt zeitliche Koordinierungnicht genauer Zeit.

    – Amadan

    12. Juni 2015 um 5:00 Uhr

  • @markE Das stimmt nicht mehr. Wegen Gespenstdie Genauigkeit von performance.now wird begrenzt

    – Benutzer5532169

    6. August 2018 um 6:39 Uhr

  • Vergleichen mit: Date.now() vs. Date.getTime()

    – KyleMit

    7. Dezember 2021 um 16:10 Uhr


Beide dienen 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, wie z. B. Medien (Spiele, Audio, Video usw.)

Es sollte erwähnt werden, dass performance.now() ist nur in neueren Browsern (einschließlich IE10+) verfügbar.

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 gleiche alte Datumsmanipulation seit den Anfängen von JavaScript.

Sehen Wenn Millisekunden nicht ausreichen: performance.now und now Methode (Internet Explorer) – MSDN für mehr Informationen.

Die offizielle W3C-Spezifikation finden Sie hier: Hochauflösende Zeit-API

  • Diese Präzision hat ihren Preis. Es ist 50% langsamer. Gut zu wissen, wenn Sie es in einer engen Schleife brauchen. jsperf.com/perf-vs-date/1

    – Eja

    4. Mai 2017 um 6:42 Uhr

  • Hoppla, ich meinte 80 % langsamer. 🙁

    – Eja

    4. Mai 2017 um 7:47 Uhr

  • Denken Sie daran, was Google Audits über date.now() denken. developer.google.com/web/tools/lighthouse/audits/date-now

    – StLia

    19. Oktober 2017 um 9:08 Uhr

  • derzeit in Firefox ist performance.now() etwa 20% schneller, aber in anderen Browsern überragend langsamer, etwa 60% – Sie können es selbst überprüfen: jsbench.me/s6jz9v29i3/1

    – Picard

    13. August 2019 um 13:35 Uhr

  • warum leitet developer.google.com/web/tools/lighthouse/audits/date-now zu dieser Stackoverflow-Frage weiter

    – Muhammad Umer

    3. Dezember 2020 um 17:36 Uhr

Benutzer-Avatar
Traumweber

Date.now() gibt die Anzahl der Millisekunden zurück, die seit dem 1. Januar 1970 00:00:00 UTC vergangen sind, performance.now() gibt die Anzahl der Millisekunden mit Mikrosekunden im Bruchteil von zurück performance.timing.navigationStartdem Start der Navigation des Dokuments, zum performance.now() Anruf. Ein weiterer wichtiger Unterschied zw Date.now() und performance.now() ist, dass letzteres monoton ansteigt, sodass die Differenz zwischen zwei Anrufen niemals negativ sein wird.

Zum besseren Verständnis besuchen Sie die Verknüpfung.

Benutzer-Avatar
Unendlicher Spieler

Das erste, was mir aufgefallen ist, war das performance.now() ist 4 Mal langsamer als Date.now() (400.000 Operationen vs. 100.000 auf meinem Computer). Wenn Sie jedoch nur zählen, verwenden Sie performance.now() ist die bessere Option. Es ist rein abhängig von der Zeit, seit der Code ausgeführt wurde, und Zeitänderungen tun dies nicht die Zeit beeinflussen. Es ist auch genauer: Zählen Sie uns (Mikrosekunden) anstelle von ms.

Was die Unterstützung betrifft, Date.now() hat etwas mehr Unterstützung als performance.now()da beide von modernen Browsern unterstützt werden, und sogar IE10/11.

new Date().getTime() hat noch mehr Unterstützung (nur ein bisschen) und ist 2x langsamer als Date.now(). Es ist langsamer, weil es ein Objekt erstellt und dann etwas aufruft.

Dies jedoch caniuse.com Seite zeigt das performance.now() ist fast immer in Ordnung, in 97,9% (Stand jetzt) ​​der Fälle.

(Von hier an beziehe ich mich nur noch auf Date.now()aber new Date.getTime() ist das gleiche in den folgenden Fällen)

Verwendungszweck

Date.now() kann (und sollte) verwendet werden, um festzustellen, ob einige Zeit vergangen ist, vorausgesetzt, die Geschwindigkeit ist von (sehr großer) Bedeutung: Auf einem 60-fps-Computer kann es leicht das richtige Bild erhalten. Es kann auch für Uhren verwendet werden. Es zählt, wie viele Millisekunden seit der Unix-Epoche vergangen sind (siehe oberste Antwort). Für Anwendungen, die etwas mehr Genauigkeit erfordern (siehe unten), performance.now() kann verwendet werden. Es verhält sich genauso wie Date.now() wenn Sie einen Timer verwenden (weil er immer noch in Millisekunden hochzählt), außer dass er genauer ist. Benutzen performance.now() als (etwas) genauer Date.now() oder Objekt, hinzufügen performance.timing.navigationStart zum Wert. Dies scheint ein paar Millisekunden von der entfernt zu sein Date.now() Objekt, aber wessen Schuld es ist, bin ich mir nicht sicher.

Genauigkeit

Soweit ich das beurteilen kann, performance.now() ist nur 10x genauer verglichen mit Date.now() auf meinem Chrome-Desktop: Unter Berücksichtigung von Zeitsprüngen von 0,1 ms ist diese Genauigkeit jedoch für die meisten zeitbasierten Anwendungen gut genug. (Lesen Sie den Firefox-Abschnitt für weitere Informationen über ihre Genauigkeit) Es sieht vielleicht genauer aus, ist es aber nicht: Es ist aus Sicherheitsgründen absichtlich begrenzt, da die Ausnutzung der Zeit böswilligen Benutzern dies ermöglichen könnte auf andere Anwendungen zugreifen.

Feuerfuchs

Leider ist diese Leistung (von 0,1 ms) Ist nicht möglich wenn Sie Firefox-Benutzer haben und keinen Zugriff auf Cross-Origin-Header haben. Um es zu aktivieren, setzen Sie die Cross-Origin-Opener-Policy: same-origin und Cross-Origin-Embedder-Policy: require-corp in Ihrem Dokument. Benutzer können diese Geschwindigkeit auch auf 100 ms (oder höher) erhöhen. Besuche den Mozilla Dokumentation für weitere Informationen.

1217360cookie-checkperformance.now() vs. Date.now()

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy