Signatur
Beschreibung
Die Eigenschaft state eines PressureRecord-Objekts gibt an, welcher Druckzustand zum Zeitpunkt der Aufzeichnung für die beobachtete Quelle (z. B. "cpu") ermittelt wurde. Sie gehört zur Compute Pressure API. Mit ihr kann eine Web-Anwendung auf eine hohe Systemauslastung reagieren.
Mögliche Werte:
"nominal": Das System ist kaum ausgelastet und läuft mit niedriger Taktfrequenz. Es gibt keinen Handlungsbedarf."fair": Die Auslastung ist normal. Zusätzliche Arbeit ist möglich."serious": Die Auslastung ist hoch, das Gerät könnte thermisch drosseln. Weitere Last sollte vermieden werden."critical": Das System ist fast am Limit, z. B. durch starke Drosselung. Die Last sollte sofort gesenkt werden.
Typische Anwendungsfälle sind Videokonferenzen, Spiele oder Streaming. Dort kann die Anwendung abhängig vom Zustand die Videoauflösung, die Bildrate oder die Zahl der Effekte anpassen, um die Nutzung flüssig und das Gerät kühl zu halten. Die Werte sind absichtlich grob gehalten. Sie verraten keine genauen Auslastungswerte, was die Privatsphäre schützt und Fingerprinting erschwert.
Rückgabewert
Beispiele
CPU-Druckzustand beobachten und ausgeben
if ('PressureObserver' in globalThis) {
const observer = new PressureObserver((records) => {
for (const record of records) {
console.log(`Quelle: ${record.source}, Zustand: ${record.state}`);
}
});
await observer.observe('cpu', { sampleInterval: 1000 });
} else {
console.log('Compute Pressure API wird nicht unterstützt.');
}
Videoqualität an den Druckzustand anpassen
const qualitaet = {
nominal: { breite: 1920, fps: 30 },
fair: { breite: 1280, fps: 30 },
serious: { breite: 640, fps: 24 },
critical: { breite: 320, fps: 15 }
};
const observer = new PressureObserver((records) => {
// Nur der neueste Eintrag ist relevant
const { state } = records.at(-1);
const { breite, fps } = qualitaet[state];
console.log(`Zustand ${state}: ${breite}px bei ${fps} fps`);
// hier z. B. videoTrack.applyConstraints({ width: breite, frameRate: fps })
});
await observer.observe('cpu');
Aufwendige Effekte bei hohem Druck abschalten
const hoheLast = new Set(['serious', 'critical']);
const observer = new PressureObserver((records) => {
const letzter = records.at(-1);
document.body.classList.toggle('effekte-aus', hoheLast.has(letzter.state));
console.log(`Effekte ${hoheLast.has(letzter.state) ? 'deaktiviert' : 'aktiv'} (${letzter.state})`);
});
await observer.observe('cpu', { sampleInterval: 2000 });
// Später aufräumen:
// observer.disconnect();
// Wichtig · Fallstricke
- Browser-Kompatibilität: Die API ist experimentell und bisher nur in Chromium-Browsern (Chrome, Edge ab Version 125) auf dem Desktop verfügbar. Firefox und Safari unterstützen sie nicht. Prüfe deshalb vorher mit
'PressureObserver' in globalThis, ob die API vorhanden ist. - Sie funktioniert nur in einem sicheren Kontext (HTTPS). In iframes muss die Permissions Policy
compute-pressuredie Nutzung erlauben. - Der Callback wird nur aufgerufen, wenn sich der Zustand ändert. Er liefert also keine fortlaufenden Messwerte. Bei gleichbleibender Last kommt deshalb keine neue Meldung.
- Die Zustände sind grobe, geräteabhängige Stufen und keine Prozentwerte.
"serious"bedeutet nicht auf jeder Hardware dasselbe. Vergleiche die Werte nicht zwischen verschiedenen Geräten. - Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird ignoriert und löst im Strict Mode einen
TypeErroraus. - Zum Schutz der Privatsphäre kann der Browser Meldungen zurückhalten, etwa wenn die Seite im Hintergrund läuft oder nicht im Fokus ist.