Signatur
Beschreibung
Browser zeichnen für jede geladene Ressource (Skripte, Bilder, Stylesheets, fetch()-Aufrufe usw.) einen PerformanceResourceTiming-Eintrag auf. Diese Einträge landen in einem begrenzten Puffer, den man über performance.getEntriesByType("resource") abfragen kann. Laut Spezifikation fasst der Puffer standardmäßig mindestens 250 Einträge.
Mit setResourceTimingBufferSize() vergrößern oder verkleinern Sie diesen Puffer. Das lohnt sich vor allem bei ressourcenlastigen Seiten wie Single-Page-Apps, Seiten mit vielen Bildern oder beim Real-User-Monitoring (RUM). Dort ist die Standardgröße schnell erreicht, und alle weiteren Einträge gehen verloren.
Ist der Puffer voll, feuert das Ereignis resourcetimingbufferfull am Performance-Objekt. Im Handler können Sie die Einträge auswerten und den Puffer mit clearResourceTimings() leeren oder ihn vergrößern. Für neue Projekte ist ein PerformanceObserver meist die bessere Wahl: Er liefert Einträge laufend und hängt nicht von der Puffergröße ab.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $maxSize Pflicht | number | Maximale Anzahl an "resource"-Einträgen, die der Puffer aufnehmen soll. Der Wert wird in eine vorzeichenlose Ganzzahl umgewandelt (unsigned long). |
Rückgabewert
undefined).Beispiele
Puffer für eine ressourcenreiche Seite vergrößern
// Möglichst früh im Dokument ausführen, z. B. in einem Inline-Skript im <head>
if (typeof performance.setResourceTimingBufferSize === 'function') {
performance.setResourceTimingBufferSize(500);
}
window.addEventListener('load', () => {
const count = performance.getEntriesByType('resource').length;
console.log(`Erfasste Ressourcen: ${count}`);
});
Auf vollen Puffer reagieren und Daten sichern
const collected = [];
performance.setResourceTimingBufferSize(200);
performance.addEventListener('resourcetimingbufferfull', () => {
// Einträge sichern, bevor der Puffer geleert wird
collected.push(...performance.getEntriesByType('resource'));
performance.clearResourceTimings();
console.log(`Puffer geleert, bisher gesichert: ${collected.length}`);
});
Puffer bei Bedarf dynamisch verdoppeln
let bufferSize = 250;
performance.setResourceTimingBufferSize(bufferSize);
performance.onresourcetimingbufferfull = () => {
bufferSize *= 2;
performance.setResourceTimingBufferSize(bufferSize);
console.log(`Neue Puffergröße: ${bufferSize}`);
};
Moderne Alternative: PerformanceObserver ohne Pufferlimit
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
console.log(entry.name, Math.round(entry.duration), 'ms');
}
});
// buffered: true liefert auch bereits erfasste Einträge nach
observer.observe({ type: 'resource', buffered: true });
// Wichtig · Fallstricke
- Früh aufrufen: Ist der Puffer bereits voll, bevor Sie ihn vergrößern, sind die überzähligen Einträge verloren. Rufen Sie die Methode deshalb so früh wie möglich im Seitenlebenszyklus auf.
- Verkleinern löscht nichts: Ein Wert unter der aktuellen Anzahl entfernt keine vorhandenen Einträge. Es kommen nur keine neuen mehr hinzu, bis der Puffer geleert wird.
- Speicherbedarf: Sehr große Werte halten viele Objekte im Speicher. Für Langzeit-Messungen ist
PerformanceObservermit regelmäßiger Übertragung der Daten die sparsamere Lösung. - Nur Resource Timing: Die Methode betrifft ausschließlich Einträge vom Typ
"resource". Andere Typen wiemark,measureodernavigationsind nicht betroffen. - Kompatibilität: Wird von allen aktuellen Browsern unterstützt, auch in Web Workern über
self.performance. In Node.js steht die Methode inperf_hooksab Version 18.8 zur Verfügung. - Cross-Origin-Ressourcen: Einträge fremder Ursprünge werden zwar erfasst, detaillierte Zeitwerte gibt es aber nur, wenn der Server den Header
Timing-Allow-Originsendet.