Signatur
Beschreibung
Die Methode takeRecords() gehört zur Compute Pressure API. Ein PressureObserver sammelt Zustandsänderungen der Rechenlast (z. B. der CPU) als PressureRecord-Objekte in einer internen Warteschlange. Normalerweise liefert der Browser diese Einträge gebündelt und asynchron an den im Konstruktor übergebenen Callback aus.
Mit takeRecords() holst du die Einträge, die zwar schon aufgezeichnet, aber noch nicht an den Callback weitergegeben wurden, sofort und synchron ab. Danach ist die Warteschlange leer, und diese Einträge gehen nicht mehr an den Callback.
Typischer Einsatz ist das Aufräumen vor dem Beenden der Beobachtung: Direkt vor unobserve() oder disconnect() rufst du takeRecords() auf, damit keine zuletzt erfassten Druckzustände verloren gehen. Außerdem kannst du damit den aktuellen Zwischenstand in einer eigenen Auswertungsschleife abfragen, ohne auf den nächsten Callback-Aufruf zu warten.
Rückgabewert
PressureRecord-Objekten (mit source, state und time). Wenn nichts in der Warteschlange liegt, ist das Array leer.Beispiele
Letzte Einträge vor dem Beenden sichern
const log = [];
const observer = new PressureObserver((records) => {
log.push(...records);
});
await observer.observe('cpu', { sampleInterval: 1000 });
// Später, z. B. beim Verlassen der Ansicht:
const stopMonitoring = () => {
// Noch nicht ausgelieferte Einträge abholen, damit sie nicht verloren gehen
const pending = observer.takeRecords();
log.push(...pending);
observer.disconnect();
console.log(`Gesamt: ${log.length} Einträge, davon ${pending.length} per takeRecords()`);
};
setTimeout(stopMonitoring, 10_000);
Aktuellen Zwischenstand synchron abfragen
const observer = new PressureObserver((records) => {
const last = records.at(-1);
console.log('Callback:', last.state);
});
await observer.observe('cpu');
document.querySelector('#status-btn').addEventListener('click', () => {
const records = observer.takeRecords();
if (records.length === 0) {
console.log('Keine neuen Einträge seit dem letzten Callback');
return;
}
const { state, time } = records.at(-1);
console.log(`Neuester Zustand: ${state} (t = ${time.toFixed(0)} ms)`);
});
Mit Feature-Erkennung und unobserve()
if ('PressureObserver' in globalThis) {
const observer = new PressureObserver((records) => {
for (const { source, state } of records) {
console.log(source, state);
}
});
try {
await observer.observe('cpu', { sampleInterval: 2000 });
} catch (err) {
console.warn('Quelle nicht verfügbar:', err.name);
}
window.addEventListener('pagehide', () => {
const rest = observer.takeRecords();
console.log('Restliche Einträge:', rest.map((r) => r.state));
observer.unobserve('cpu');
});
} else {
console.log('Compute Pressure API wird nicht unterstützt');
}
// Wichtig · Fallstricke
- Die Einträge gehen nicht mehr an den Callback: Was du mit
takeRecords()abholst, wird aus der Warteschlange entfernt und nicht noch einmal ausgeliefert. Du musst diese Einträge also selbst verarbeiten. - Kein Messwert auf Abruf: Die Methode fragt keinen neuen Druckwert beim System ab. Sie gibt nur zurück, was schon aufgezeichnet wurde. Ein leeres Array ist daher der Normalfall, wenn der Callback gerade erst gelaufen ist.
- Kompatibilität: Die Compute Pressure API ist experimentell und nur in Chromium-Browsern verfügbar (ab Chrome/Edge 125). Firefox und Safari unterstützen sie nicht. Prüfe sie immer mit
'PressureObserver' in globalThis. - Kontext und Berechtigung: Die API ist nur in sicheren Kontexten (HTTPS) verfügbar. In iframes muss sie über die Permissions Policy
compute-pressureerlaubt sein. Die Beobachtung kann ruhen, solange die Seite nicht sichtbar ist oder keinen Fokus hat. - Aus Datenschutzgründen sind die Zustände grob abgestuft (
nominal,fair,serious,critical) und können leicht verzögert oder ungenau sein.