Start · Sprachen · JavaScript · Referenz · PressureRecord.state

PressureRecord.state

Eigenschaft

Schreibgeschützter String mit dem aufgezeichneten Druckzustand der Quelle: <code>"nominal"</code>, <code>"fair"</code>, <code>"serious"</code> oder <code>"critical"</code>.

seit JavaScript Chromium 125+ (experimentell, nur sicherer Kontext Kategorie: webapi

Signatur

PressureRecord.state

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

Typ
"nominal" | "fair" | "serious" | "critical"
Beschreibung
Ein String, der den aufgezeichneten Druckzustand der Quelle angibt. Er ist schreibgeschützt.

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.');
}
Quelle: cpu, Zustand: fair

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');
Zustand serious: 640px bei 24 fps

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();
Effekte deaktiviert (critical)

// 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-pressure die 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 TypeError aus.
  • Zum Schutz der Privatsphäre kann der Browser Meldungen zurückhalten, etwa wenn die Seite im Hintergrund läuft oder nicht im Fokus ist.