Signatur
Beschreibung
Der Konstruktor PressureObserver() gehört zur Compute Pressure API. Er erzeugt einen Beobachter, der meldet, wie stark eine Systemressource ausgelastet ist, derzeit nur die CPU ("cpu"). Er liefert keine genauen Prozentwerte. Stattdessen meldet er einen von vier groben Zuständen: "nominal", "fair", "serious" und "critical".
Die API eignet sich für Anwendungen, die viel Rechenleistung brauchen, zum Beispiel Videokonferenzen, Spiele im Browser, Echtzeit-Dashboards oder Medienbearbeitung. Sie können ihre Last je nach Zustand anpassen. Bei hohem Druck reduziert man etwa die Videoauflösung, blendet Hintergrundeffekte aus oder zeigt weniger Video-Kacheln an.
Wenn Sie den Konstruktor aufrufen, beginnt die Beobachtung noch nicht. Erst observe(source, options) startet sie. Die Methode gibt ein Promise zurück, und in ihren Optionen legen Sie auch das gewünschte Abfrageintervall (sampleInterval) fest. Die Callback-Funktion erhält ein Array von PressureRecord-Objekten mit den Eigenschaften source, state und time. Als zweites Argument bekommt sie den Beobachter selbst.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $callback Pflicht | (records: PressureRecord[], observer: PressureObserver) => void | Wird aufgerufen, sobald sich der Druckzustand einer beobachteten Quelle ändert. records enthält die neuen PressureRecord-Einträge, observer ist die aufrufende Instanz. |
Rückgabewert
PressureObserver-Objekt, das noch keine Quelle beobachtet.Beispiele
CPU-Druck beobachten und protokollieren
const logPressure = (records) => {
for (const record of records) {
console.log(`${record.source}: ${record.state} (t=${Math.round(record.time)})`);
}
};
if ('PressureObserver' in globalThis) {
const observer = new PressureObserver(logPressure);
try {
await observer.observe('cpu', { sampleInterval: 1000 }); // höchstens 1 Meldung pro Sekunde
} catch (err) {
console.error('Beobachtung nicht möglich:', err.name);
}
} 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: '240p'
};
const applyQuality = (quality) => {
console.log('Setze Videoqualität auf', quality);
// hier z. B. Encoder-Einstellungen per RTCRtpSender.setParameters() ändern
};
const observer = new PressureObserver((records) => {
const latest = records.at(-1);
applyQuality(qualityByState[latest.state]);
});
await observer.observe('cpu', { sampleInterval: 2000 });
Unterstützte Quellen prüfen und Beobachtung beenden
console.log(PressureObserver.knownSources); // z. B. ['cpu']
const observer = new PressureObserver((records, obs) => {
if (records.some((r) => r.state === 'critical')) {
console.warn('Kritische Last – Beobachtung wird beendet.');
obs.disconnect();
}
});
if (PressureObserver.knownSources.includes('cpu')) {
await observer.observe('cpu');
}
// Beim Verlassen der Seite aufräumen
window.addEventListener('pagehide', () => observer.unobserve('cpu'));
// Wichtig · Fallstricke
- Experimentell: Die API gibt es derzeit nur in Chromium-Browsern (Chrome und Edge ab Version 125). Firefox und Safari unterstützen sie nicht. Prüfen Sie deshalb vorher mit
'PressureObserver' in globalThis, ob sie vorhanden ist. - Nur in sicheren Kontexten: Die API funktioniert nur über HTTPS oder auf
localhost. In iframes muss die Permissions-Policycompute-pressuresie erlauben, sonst schlägtobserve()mitNotAllowedErrorfehl. - Die API steht im
Windowsowie in dedizierten und geteilten Workern zur Verfügung, aber nicht in Service Workern. - Die Callback-Funktion wird nur ausgelöst, wenn die Seite sichtbar ist oder den Fokus hat. In Hintergrund-Tabs kommen keine Meldungen.
- Das
sampleIntervalist ein Wunschwert. Der Browser kann seltener melden. Er meldet außerdem nur, wenn sich der Zustand tatsächlich ändert. - Aus Datenschutzgründen sind die Zustände bewusst grob gehalten, und der Browser kann sie verzögern oder leicht verrauschen. Leiten Sie daraus keine genauen Hardware-Messwerte ab.
- Frühere Entwürfe der Spezifikation nahmen
sampleIntervalals zweites Argument des Konstruktors entgegen. Heute gehört es in die Optionen vonobserve().