Start · Sprachen · JavaScript · Referenz · new PressureObserver()

new PressureObserver()

Methode

Erstellt ein <code>PressureObserver</code>-Objekt. Es ruft eine Callback-Funktion auf, sobald sich der Druckzustand einer Systemressource wie der CPU ändert.

seit JavaScript Chrome/Edge 125+ (experimentell, keine Baseline) Kategorie: webapi

Signatur

new PressureObserver(callback)

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

Typ
PressureObserver
Beschreibung
Ein neues 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.');
}
cpu: nominal (t=1532) cpu: fair (t=8120)

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 });
Setze Videoqualität auf 720p

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'));
["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-Policy compute-pressure sie erlauben, sonst schlägt observe() mit NotAllowedError fehl.
  • Die API steht im Window sowie 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 sampleInterval ist 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 sampleInterval als zweites Argument des Konstruktors entgegen. Heute gehört es in die Optionen von observe().