Signatur
Beschreibung
Die Eigenschaft time eines PressureRecord-Objekts enthält einen hochauflösenden Zeitstempel (DOMHighResTimeStamp) in Millisekunden. Er gibt an, wann der Druckzustand (state) einer Quelle wie "cpu" erfasst wurde. Gemessen wird relativ zum Zeitursprung des aktuellen Dokuments bzw. Workers, also auf derselben Zeitachse wie performance.now().
Gebraucht wird der Zeitstempel vor allem, um Druckänderungen zeitlich einzuordnen, zum Beispiel:
- um zu messen, wie lange ein Zustand wie
"serious"oder"critical"schon anhält, - um Druckdaten mit eigenen Performance-Messungen zu verknüpfen (
performance.mark(), Frame-Zeiten, Videokodierung), - um Datensätze zu sortieren oder ungültig zu machen, wenn sie gepuffert über
PressureObserver.takeRecords()abgeholt werden.
Willst du einen absoluten Unix-Zeitstempel, addierst du performance.timeOrigin. Der Wert ist schreibgeschützt und wird vom Browser beim Erzeugen des Datensatzes festgelegt.
Rückgabewert
performance.timeOrigin.Beispiele
Zeitstempel jedes Druck-Datensatzes ausgeben
if ('PressureObserver' in globalThis) {
const observer = new PressureObserver((records) => {
for (const record of records) {
console.log(`${record.source}: ${record.state} @ ${record.time.toFixed(1)} ms`);
}
});
await observer.observe('cpu', { sampleInterval: 1000 });
} else {
console.warn('Compute Pressure API wird nicht unterstützt.');
}
In absolute Uhrzeit umrechnen
const observer = new PressureObserver((records) => {
const last = records.at(-1);
const absolut = new Date(performance.timeOrigin + last.time);
console.log(`CPU-Zustand "${last.state}" um ${absolut.toLocaleTimeString('de-DE')}`);
});
await observer.observe('cpu');
Dauer eines kritischen Zustands messen und Qualität anpassen
let kritischSeit = null;
const observer = new PressureObserver((records) => {
for (const { state, time } of records) {
if (state === 'serious' || state === 'critical') {
kritischSeit ??= time;
const dauer = time - kritischSeit;
if (dauer > 5000) {
console.log(`Hohe Last seit ${(dauer / 1000).toFixed(1)} s – Videoauflösung wird reduziert`);
// z. B. videoTrack.applyConstraints({ height: 360 });
}
} else {
kritischSeit = null;
}
}
});
await observer.observe('cpu', { sampleInterval: 1000 });
Gepufferte Datensätze vor dem Beenden auswerten
const observer = new PressureObserver(() => {});
await observer.observe('cpu');
// später, z. B. beim Verlassen der Seite
const pending = observer.takeRecords();
const jüngster = pending.sort((a, b) => b.time - a.time)[0];
console.log(jüngster ? jüngster.toJSON() : 'keine offenen Datensätze');
observer.disconnect();
// Wichtig · Fallstricke
- Relative Zeitangabe:
timeist kein Unix-Zeitstempel wieDate.now(). Ohne Umrechnung überperformance.timeOriginsind Werte aus verschiedenen Dokumenten oder Workern nicht vergleichbar. - Kein fester Takt: Der Callback wird nur bei einer Zustandsänderung aufgerufen.
sampleIntervalist lediglich ein Mindestabstand. Die Zeitabstände zwischen Datensätzen können daher schwanken und groß sein. - Genauigkeit: Wie bei allen
DOMHighResTimeStamp-Werten kann der Browser die Auflösung zum Schutz vor Timing-Angriffen reduzieren (zum Beispiel ohne Cross-Origin-Isolation). - Kompatibilität: Die Compute Pressure API ist experimentell und bisher nur in Chromium-basierten Desktop-Browsern (ab Version 125) verfügbar, nicht in Firefox oder Safari. Sie braucht einen sicheren Kontext (HTTPS) und funktioniert in Fenstern und Workern. In iframes muss die Berechtigungsrichtlinie
compute-pressuresie erlauben. Prüfe die Unterstützung immer vorher mit'PressureObserver' in globalThis. - Der Wert steht auch in der Ausgabe von
PressureRecord.toJSON().