Start · Sprachen · JavaScript · Referenz · PressureRecord.toJSON()

PressureRecord.toJSON()

Methode

Gibt ein einfaches Objekt mit den Eigenschaften <code>source</code>, <code>state</code> und <code>time</code> eines <code>PressureRecord</code> zurück, das sich mit JSON serialisieren lässt.

seit JavaScript Experimentell: Chrome/Edge 125+ (Desktop), nicht i Kategorie: webapi

Signatur

PressureRecord.prototype.toJSON()

Beschreibung

toJSON() ist die Serialisierungsmethode von PressureRecord aus der Compute Pressure API. Sie gibt ein gewöhnliches JavaScript-Objekt zurück, das die aktuellen Werte der Eigenschaften source (z. B. "cpu"), state ("nominal", "fair", "serious" oder "critical") und time (ein DOMHighResTimeStamp) enthält.

Nötig ist das, weil PressureRecord-Instanzen ihre Werte über Getter am Prototyp bereitstellen und keine eigenen, aufzählbaren Eigenschaften haben. Ohne toJSON() würde JSON.stringify(record) nur "{}" liefern. Da JSON.stringify() toJSON() automatisch aufruft, musst du die Methode selten direkt aufrufen.

Typische Einsatzfälle sind die Übertragung von Lastmessungen an einen Analyse-Server, das Zwischenspeichern in localStorage oder IndexedDB und das Weiterreichen per postMessage(), wenn du einfache Datenobjekte statt der Plattform-Objekte weitergeben willst.

Rückgabewert

Typ
{ source: string, state: string, time: number }
Beschreibung
Ein einfaches Objekt mit den Werten von source, state und time des Datensatzes. Es wird kein JSON-String zurückgegeben – den erzeugst du erst mit JSON.stringify().

Beispiele

Datensatz als JSON protokollieren

if ('PressureObserver' in globalThis) {
  const observer = new PressureObserver((records) => {
    const last = records.at(-1);
    // toJSON() wird von JSON.stringify automatisch aufgerufen
    console.log(JSON.stringify(last));
    // Direkter Aufruf liefert ein einfaches Objekt
    console.log(last.toJSON());
  });

  await observer.observe('cpu', { sampleInterval: 1000 });
} else {
  console.log('Compute Pressure API nicht verfügbar');
}
{"source":"cpu","state":"nominal","time":1523.4} { source: 'cpu', state: 'nominal', time: 1523.4 }

Lastmessungen sammeln und an den Server senden

const buffer = [];

const observer = new PressureObserver((records) => {
  // Plattform-Objekte in einfache Objekte umwandeln
  buffer.push(...records.map((r) => r.toJSON()));
});

await observer.observe('cpu', { sampleInterval: 2000 });

// Beim Verlassen der Seite gesammelte Daten übertragen
document.addEventListener('visibilitychange', () => {
  if (document.visibilityState === 'hidden' && buffer.length > 0) {
    navigator.sendBeacon('/api/telemetry/pressure', JSON.stringify(buffer));
    buffer.length = 0;
  }
});

Unterschied mit und ohne toJSON()

const observer = new PressureObserver((records) => {
  const record = records[0];

  // Getter liegen am Prototyp und werden deshalb nicht kopiert
  console.log(Object.keys(record));
  console.log({ ...record });

  // toJSON() liefert die Werte
  const plain = record.toJSON();
  console.log(Object.keys(plain));
  localStorage.setItem('lastPressure', JSON.stringify(plain));

  observer.disconnect();
});

await observer.observe('cpu');
[] {} [ 'source', 'state', 'time' ]

// Wichtig · Fallstricke

  • Experimentelle API: Die Compute Pressure API gibt es bisher nur in Chromium-Browsern (Chrome/Edge ab 125, nur Desktop). Firefox und Safari unterstützen sie nicht. Prüfe deshalb immer mit 'PressureObserver' in globalThis, ob sie verfügbar ist.
  • Die API ist nur in sicheren Kontexten (HTTPS) verfügbar. In iframes muss die Berechtigungsrichtlinie compute-pressure sie erlauben.
  • time ist ein relativer Zeitstempel ab performance.timeOrigin und keine Unix-Zeit. Für die Auswertung auf dem Server rechnest du ihn mit performance.timeOrigin + record.time um.
  • Ohne toJSON() gehen die Werte beim Serialisieren und beim Spread-Operator verloren ({}), weil sie über Getter am Prototyp bereitgestellt werden.
  • Die Methode gibt ein Objekt zurück, keinen String. Zum Senden brauchst du trotzdem JSON.stringify().
  • Neuere Fassungen der Spezifikation können weitere Felder ergänzen, zum Beispiel eine Schätzung, wie viel die eigene Seite zur Last beiträgt. Verlass dich deshalb nicht auf eine feste Anzahl von Schlüsseln.