Signatur
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
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');
}
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');
// 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-pressuresie erlauben. timeist ein relativer Zeitstempel abperformance.timeOriginund keine Unix-Zeit. Für die Auswertung auf dem Server rechnest du ihn mitperformance.timeOrigin + record.timeum.- 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.