Performance: now() Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die performance.now() Methode gibt einen hochauflösenden Zeitstempel in Millisekunden zurück. Sie stellt die Zeit dar, die seit Performance.timeOrigin vergangen ist (die Zeit, seit der die Navigation in Fensterkontexten gestartet wurde, oder die Zeit, zu der der Worker im Worker und ServiceWorker Kontext ausgeführt wird).

Syntax

js
now()

Parameter

Keine.

Rückgabewert

Gibt einen DOMHighResTimeStamp in Millisekunden zurück.

Beschreibung

Performance.now vs. Date.now

Im Gegensatz zu Date.now sind die von performance.now() zurückgegebenen Zeitstempel nicht auf eine Auflösung von einer Millisekunde beschränkt. Stattdessen stellen sie Zeiten als Gleitkommazahlen mit bis zu Mikrosekunden-Genauigkeit dar.

Zusätzlich kann Date.now() von System- und Benutzeruhrenanpassungen, Zeitabweichungen usw. beeinflusst worden sein, da es relativ zur Unix-Epoche (1970-01-01T00:00:00Z) und abhängig von der Systemuhr ist. Die performance.now() Methode hingegen ist relativ zur timeOrigin-Eigenschaft, die eine monotone Uhr ist: Die aktuelle Zeit verringert sich nie und unterliegt keinen Anpassungen.

Änderungen der performance.now Spezifikation

Die Semantik der performance.now() Methode änderte sich zwischen High Resolution Time Level 1 und Level 2.

Änderungen Level 1 Level 2
Relativ zu performance.timing.navigationStart Performance.timeOrigin
Auslösebedingungen Dokumentenabruf oder Entladeaufforderung (falls vorhanden). Erstellung des Browsing-Kontexts (falls kein vorheriges Dokument), Entladeaufforderung (falls vorhanden), oder Start der Navigation (wie im HTML definiert, einige Schritte vor dem Abrufen).

Die performance.now() Methode war früher relativ zur performance.timing.navigationStart Eigenschaft aus der Navigation Timing Spezifikation. Dies änderte sich und performance.now() ist nun relativ zu Performance.timeOrigin, was das Risiko von Uhrenänderungen beim Vergleich von Zeitstempeln über Webseiten hinweg vermeidet.

js
// Level 1 (clock change risks)
currentTime = performance.timing.navigationStart + performance.now();

// Level 2 (no clock change risks)
currentTime = performance.timeOrigin + performance.now();

Fortschreiben während des Schlafs

Die Spezifikation (Level 2) verlangt, dass performance.now() während des Schlafs weiterzählt. Es scheint, dass nur Firefox auf Windows und Chromiums auf Windows während des Schlafs weiterzählen. Relevante Browserfehler für andere Betriebssysteme:

  • Chrome/Chromium (bug)
  • Firefox (bug)
  • Safari/WebKit (bug)

Weitere Details finden Sie auch im Spezifikationsproblem hr-time#115.

Sicherheitsanforderungen

Um Schutz gegen Zeitangriffe und Fingerprinting zu bieten, wird performance.now() basierend darauf, ob das Dokument cross-origin isoliert ist oder nicht, geglättet.

  • Auflösung in isolierten Kontexten: 5 Mikrosekunden
  • Auflösung in nicht isolierten Kontexten: 100 Mikrosekunden

Sie können die Eigenschaften Window.crossOriginIsolated und WorkerGlobalScope.crossOriginIsolated verwenden, um zu überprüfen, ob das Dokument cross-origin isoliert ist:

js
if (crossOriginIsolated) {
  // Use measureUserAgentSpecificMemory
}

Beispiele

Verwendung von performance.now()

Um zu bestimmen, wie viel Zeit seit einem bestimmten Punkt in Ihrem Code vergangen ist, können Sie etwas in der Art machen:

js
const t0 = performance.now();
doSomething();
const t1 = performance.now();
console.log(`Call to doSomething took ${t1 - t0} milliseconds.`);

Spezifikationen

Specification
High Resolution Time
# dom-performance-now

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch