Signatur
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
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);
}
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.");
}
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");
// 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-pressureerlaubt sein (allow="compute-pressure"). Sonst wird das Promise mitNotAllowedErrorabgelehnt. - Der Callback wird nur aufgerufen, wenn sich der Zustand ändert, nicht bei jedem Abtastintervall.
sampleIntervalist 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
awaitoder.catch()ab. Nicht abgefangene Ablehnungen führen sonst zuunhandledrejection. - Beende die Beobachtung mit
unobserve()oderdisconnect(), wenn du sie nicht mehr brauchst. Das spart Ressourcen.