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: Dieses Feature ist verfügbar in Web Workers.
Die Methode performance.now()
gibt einen hochauflösenden Zeitstempel in Millisekunden zurück. Sie stellt die seit Performance.timeOrigin
vergangene Zeit dar (die Zeit, zu der die Navigation in Fensterkontexten gestartet wurde, oder die Zeit, zu der der Worker in Worker
- und ServiceWorker
-Kontexten ausgeführt wird).
Syntax
now()
Parameter
Keine.
Rückgabewert
Gibt einen DOMHighResTimeStamp
zurück, der in Millisekunden gemessen wird.
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-Präzision dar.
Außerdem kann Date.now()
durch System- und Benutzeruhrkorrekturen, Uhrabweichungen usw. beeinflusst worden sein, da es relativ zur Unix-Epoche (1970-01-01T00:00:00Z) und abhängig von der Systemuhr ist. Die Methode performance.now()
hingegen ist relativ zur Eigenschaft timeOrigin
, die eine monotone Uhr ist: Ihre aktuelle Zeit nimmt niemals ab und unterliegt keinen Anpassungen.
Änderungen der Spezifikation von performance.now
Die Semantik der Methode performance.now()
hat sich zwischen High Resolution Time Level 1 und Level 2 geändert.
Änderungen | Level 1 | Level 2 |
---|---|---|
Relativ zu | performance.timing.navigationStart |
Performance.timeOrigin |
Auslösebedingungen | Abrufen des Dokuments oder Auslöselaufforderung (falls vorhanden). | Erstellung des Browsing-Kontextes (wenn kein vorheriges Dokument vorhanden ist), Auslöselaufforderung (falls vorhanden) oder Beginn der Navigation (wie in HTML definiert, einige Schritte vor dem Abrufen). |
Die Methode performance.now()
war früher relativ zur Eigenschaft performance.timing.navigationStart
der Navigation Timing-Spezifikation. Diese Änderung macht performance.now()
jetzt relativ zu Performance.timeOrigin
, was Risiken von Uhränderungen beim Vergleich von Zeitstempeln über Webseiten hinweg vermeidet.
// Level 1 (clock change risks)
currentTime = performance.timing.navigationStart + performance.now();
// Level 2 (no clock change risks)
currentTime = performance.timeOrigin + performance.now();
Ticken während des Schlafmodus
Die Spezifikation (Level 2) erfordert, dass performance.now()
während des Schlafs tickt. Es scheint, dass nur Firefox unter Windows und Chromium-Browser unter Windows während des Schlafs weiterticken. Relevante Browser-Bugs für andere Betriebssysteme:
Weitere Details finden Sie auch in der Spezifikationsdiskussion hr-time#115.
Beispiele
Verwendung von performance.now()
Um zu bestimmen, wie viel Zeit seit einem bestimmten Punkt in Ihrem Code vergangen ist, können Sie etwas wie dies tun:
const t0 = performance.now();
doSomething();
const t1 = performance.now();
console.log(`Call to doSomething took ${t1 - t0} milliseconds.`);
Sicherheitsanforderungen
Zum Schutz vor Timing-Angriffen und Fingerprinting wird performance.now()
basierend auf dem Status der Site-Isolation grob eingestellt.
- Auflösung in isolierten Kontexten: 5 Mikrosekunden
- Auflösung in nicht isolierten Kontexten: 100 Mikrosekunden
Isolieren Sie Ihre Site auf Ursprungsebene mit den Headern Cross-Origin-Opener-Policy
und
Cross-Origin-Embedder-Policy
:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Diese Header sorgen dafür, dass ein Top-Level-Dokument keine Browsing-Kontextgruppe mit Cross-Origin-Dokumenten teilt. COOP isoliert Ihren Prozess und potenzielle Angreifer können nicht auf Ihr globales Objekt zugreifen, wenn sie es in einem Popup öffnen, und verhindern so eine Reihe von Cross-Origin-Angriffen, die als XS-Leaks bezeichnet werden.
Spezifikationen
Specification |
---|
High Resolution Time # dom-performance-now |
Browser-Kompatibilität
BCD tables only load in the browser