Start · Sprachen · JavaScript · Referenz · PressureObserver.observe()

PressureObserver.observe()

Methode

Startet die Überwachung einer Druckquelle wie <code>"cpu"</code>. Bei Zustandsänderungen ruft der Beobachter seinen Callback mit <code>PressureRecord</code>-Objekten auf.

seit JavaScript Experimentell: Chrome/Edge 125+ (Desktop), nicht i Kategorie: webapi

Signatur

PressureObserver.prototype.observe(source, options)

Beschreibung

Die Methode observe() gehört zur Compute Pressure API. Sie meldet einen PressureObserver bei einer Druckquelle an. Derzeit ist das in der Praxis nur "cpu". Danach ruft der Browser den Callback aus dem Konstruktor auf, sobald sich der Druckzustand ändert. Der Callback bekommt ein Array von PressureRecord-Objekten mit den Eigenschaften source, state ("nominal", "fair", "serious" oder "critical") und time.

Die API ist für Anwendungen gedacht, die ihre Last an die Leistung des Geräts anpassen wollen. Dazu gehören Videokonferenzen (weniger Videokacheln, niedrigere Auflösung), Spiele (weniger Effekte) oder Dashboards (seltenere Aktualisierung). Sie liefert bewusst nur grobe Zustände und keine genauen Auslastungswerte. So bleibt die Privatsphäre geschützt und Fingerprinting wird erschwert.

observe() ist asynchron und gibt ein Promise zurück. Warte immer darauf, dann kannst du Fehler wie eine nicht unterstützte Quelle oder eine blockierende Permissions-Policy abfangen. Mit der Option sampleInterval legst du fest, in welchem Abstand in Millisekunden höchstens Messwerte geliefert werden sollen.

Parameter

Name Typ Default Beschreibung
$source Pflicht string Die zu überwachende Druckquelle, z. B. "cpu". Welche Quellen unterstützt werden, zeigt PressureObserver.knownSources.
$options object {} Optionales Objekt mit Einstellungen für die Beobachtung.
$options.sampleInterval number 0 Gewünschter Abstand zwischen zwei Messungen in Millisekunden. Der Browser kann davon abweichen, wenn das Gerät diese Rate nicht liefern kann.

Rückgabewert

Typ
Promise<undefined>
Beschreibung
Ein Promise, das erfüllt wird, sobald die Beobachtung läuft. Es wird abgelehnt mit NotSupportedError (Quelle nicht unterstützt), NotAllowedError (durch die Permissions-Policy compute-pressure blockiert) oder AbortError (unobserve()/disconnect() wurde vor dem Erfüllen aufgerufen).

Beispiele

CPU-Druck beobachten und protokollieren

const observer = new PressureObserver((records) => {
  const latest = records.at(-1);
  console.log(`CPU-Zustand: ${latest.state}`);
});

try {
  await observer.observe("cpu", { sampleInterval: 1000 });
  console.log("Beobachtung gestartet");
} catch (err) {
  console.error("Compute Pressure nicht verfügbar:", err.name);
}
Beobachtung gestartet CPU-Zustand: nominal CPU-Zustand: fair

Funktionsprüfung vor dem Aufruf

const canObserveCpu = () =>
  "PressureObserver" in globalThis &&
  PressureObserver.knownSources.includes("cpu");

if (canObserveCpu()) {
  const observer = new PressureObserver((records) => console.log(records));
  await observer.observe("cpu");
} else {
  console.log("Compute Pressure API wird nicht unterstützt.");
}
Compute Pressure API wird nicht unterstützt. (z. B. in Firefox)

Videoqualität an die CPU-Last anpassen

const qualityByState = {
  nominal: "1080p",
  fair: "720p",
  serious: "480p",
  critical: "360p"
};

const setVideoQuality = (q) => console.log(`Videoqualität: ${q}`);

const observer = new PressureObserver((records) => {
  const { state } = records.at(-1);
  setVideoQuality(qualityByState[state]);
});

await observer.observe("cpu", { sampleInterval: 2000 });

// Beim Verlassen des Anrufs aufräumen
const endCall = () => observer.unobserve("cpu");
Videoqualität: 720p

// Wichtig · Fallstricke

  • Experimentell: Unterstützt nur von Chromium-Browsern ab Version 125 auf dem Desktop. Firefox und Safari kennen die API nicht. Prüfe daher immer vorher mit "PressureObserver" in globalThis.
  • Nur in sicheren Kontexten (HTTPS oder localhost) verfügbar. Nutzbar im Fenster sowie in dedizierten und geteilten Workern.
  • Permissions-Policy: In iframes muss compute-pressure erlaubt sein (allow="compute-pressure"). Sonst wird das Promise mit NotAllowedError abgelehnt.
  • Der Callback wird nur aufgerufen, wenn sich der Zustand ändert, nicht bei jedem Abtastintervall. sampleInterval ist ein Wunschwert und keine Garantie.
  • Aus Datenschutzgründen liefert Chrome Messwerte in der Regel nur, solange das Dokument sichtbar ist und den Fokus hat (bzw. bei iframes unter bestimmten Bedingungen).
  • Rufe das Promise immer mit await oder .catch() ab. Nicht abgefangene Ablehnungen führen sonst zu unhandledrejection.
  • Beende die Beobachtung mit unobserve() oder disconnect(), wenn du sie nicht mehr brauchst. Das spart Ressourcen.