Start · Sprachen · JavaScript · Referenz · PressureObserver.unobserve()

PressureObserver.unobserve()

Methode

Beendet die Beobachtung einer Druckquelle (z. B. <code>"cpu"</code>). Der Callback des <code>PressureObserver</code> erhält danach keine Druckaufzeichnungen mehr von dieser Quelle.

seit JavaScript Chromium 125+ (Chrome, Edge, Opera); experimentell Kategorie: webapi

Signatur

PressureObserver.prototype.unobserve(source)

Beschreibung

Die Methode unobserve() gehört zur Compute Pressure API. Sie meldet einen PressureObserver von genau einer Druckquelle ab, die vorher mit observe() registriert wurde. Danach ruft der Browser den Callback für diese Quelle nicht mehr auf. Andere Quellen, die derselbe Observer beobachtet, laufen weiter.

Sinnvoll ist das zum Beispiel, wenn eine Videokonferenz-App die CPU-Last nur während eines aktiven Anrufs überwachen soll, oder wenn ein Tab in den Hintergrund wechselt und keine Anpassung der Qualität mehr nötig ist. Wenn Sie Quellen abmelden, die Sie nicht mehr brauchen, spart der Browser Rechenzeit, die er sonst für die Druckmessung aufwenden würde.

Im Unterschied dazu beendet disconnect() die Beobachtung aller Quellen auf einmal. Mit unobserve() steuern Sie dagegen gezielt einzelne Quellen. Wenn Sie eine Quelle aufrufen, die gar nicht beobachtet wird, passiert nichts. Es wird kein Fehler ausgelöst.

Parameter

Name Typ Default Beschreibung
$source Pflicht string Die Druckquelle, deren Beobachtung beendet werden soll. Aktuell unterstützt wird "cpu". Welche Quellen verfügbar sind, zeigt PressureObserver.knownSources. Eine unbekannte Quelle löst einen TypeError aus.

Rückgabewert

Typ
undefined
Beschreibung
Kein Rückgabewert. Die Abmeldung erfolgt synchron.

Beispiele

CPU-Beobachtung starten und wieder beenden

const observer = new PressureObserver((records) => {
  const last = records.at(-1);
  console.log(`CPU-Zustand: ${last.state}`);
});

await observer.observe("cpu", { sampleInterval: 1000 });

// Nach 10 Sekunden die CPU nicht mehr beobachten
setTimeout(() => {
  observer.unobserve("cpu");
  console.log("CPU-Beobachtung beendet");
}, 10_000);
CPU-Zustand: nominal CPU-Zustand: fair ... CPU-Beobachtung beendet

Beobachtung nur bei sichtbarem Tab

const observer = new PressureObserver((records) => {
  const { state } = records.at(-1);
  // z. B. Videoqualität je nach Last anpassen
  document.body.dataset.cpuPressure = state;
});

const sync = async () => {
  if (document.visibilityState === "visible") {
    await observer.observe("cpu");
  } else {
    observer.unobserve("cpu");
  }
};

document.addEventListener("visibilitychange", sync);
await sync();

Mit Feature-Erkennung und Prüfung der Quellen

if ("PressureObserver" in globalThis &&
    PressureObserver.knownSources.includes("cpu")) {
  const observer = new PressureObserver((records) => {
    for (const r of records) console.log(r.source, r.state);
  });

  try {
    await observer.observe("cpu");
  } catch (err) {
    console.error("Beobachtung nicht erlaubt:", err.name);
  }

  // Später gezielt abmelden (kein Fehler, falls nicht aktiv)
  observer.unobserve("cpu");
} else {
  console.log("Compute Pressure API nicht verfügbar");
}
Compute Pressure API nicht verfügbar

// Wichtig · Fallstricke

  • Browser-Unterstützung: Die API ist experimentell und nur in Chromium-Browsern verfügbar (ab Version 125). Firefox und Safari unterstützen sie nicht. Prüfen Sie deshalb vorher mit "PressureObserver" in globalThis, ob die API vorhanden ist.
  • Die API ist nur in einem sicheren Kontext (HTTPS) verfügbar, im Fenster sowie in Dedicated und Shared Workers. In eingebetteten iframes muss die Permissions-Policy compute-pressure sie erlauben.
  • Wenn Sie eine Quelle aufrufen, die nicht beobachtet wird, geschieht nichts. Eine Quelle, die der Browser nicht kennt, löst dagegen einen TypeError aus.
  • Aufzeichnungen, die bereits gesammelt, aber noch nicht zugestellt wurden, gehen beim Abmelden verloren. Wenn Sie diese noch brauchen, lesen Sie sie vorher mit takeRecords() aus.
  • Die Spezifikation sieht zusätzlich die Quelle "thermal" vor, sie ist derzeit aber in keinem Browser umgesetzt.
  • observe() gibt ein Promise zurück. Wenn Sie unobserve() aufrufen, bevor dieses Promise erfüllt ist, kann es zu Race Conditions kommen. Warten Sie deshalb observe() am besten mit await ab.