Signatur
Beschreibung
Die schreibgeschützte Eigenschaft loadEventStart des Interfaces PerformanceNavigationTiming gibt den Zeitpunkt in Millisekunden an, an dem der Browser das load-Ereignis des Dokuments auslöst, also direkt bevor die registrierten Handler ausgeführt werden. Der Wert bezieht sich auf performance.timeOrigin, den Beginn der Navigation.
Zusammen mit loadEventEnd lässt sich messen, wie lange die eigenen load-Handler brauchen. Der Wert selbst zeigt außerdem an, wann alle Ressourcen der Seite (Bilder, Stylesheets, Skripte, iframes) fertig geladen sind. Deshalb ist er eine gängige Kennzahl für die gesamte Ladezeit der Seite.
Den Eintrag erhält man über performance.getEntriesByType("navigation")[0] oder über einen PerformanceObserver mit type: "navigation". Solange das load-Ereignis noch nicht ausgelöst wurde, ist der Wert 0.
Rückgabewert
performance.timeOrigin, direkt vor dem Start des load-Handlers. Der Wert ist 0, wenn das Ereignis noch nicht ausgelöst wurde.Beispiele
Dauer der load-Handler messen
window.addEventListener('load', () => {
// Einen Tick warten, damit loadEventEnd gesetzt ist
setTimeout(() => {
const [nav] = performance.getEntriesByType('navigation');
const dauer = nav.loadEventEnd - nav.loadEventStart;
console.log(`load-Start: ${nav.loadEventStart.toFixed(1)} ms`);
console.log(`load-Handler-Dauer: ${dauer.toFixed(1)} ms`);
}, 0);
});
Mit PerformanceObserver erfassen
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
console.log('Seite vollständig geladen nach',
Math.round(entry.loadEventStart), 'ms');
}
});
// buffered: true liefert auch bereits erfasste Einträge
observer.observe({ type: 'navigation', buffered: true });
Ladephasen an Analytics senden
window.addEventListener('load', () => {
setTimeout(() => {
const [nav] = performance.getEntriesByType('navigation');
if (!nav || nav.loadEventStart === 0) return;
const metriken = {
ttfb: nav.responseStart,
domFertig: nav.domContentLoadedEventStart,
ladeStart: nav.loadEventStart,
ressourcenNachDom: nav.loadEventStart - nav.domContentLoadedEventEnd
};
navigator.sendBeacon('/analytics', JSON.stringify(metriken));
console.log(metriken);
}, 0);
});
// Wichtig · Fallstricke
- Zeitpunkt der Abfrage: Wer den Wert vor dem
load-Ereignis ausliest, etwa in einem Inline-Skript, erhält0.loadEventEndwird erst nach allen Handlern gesetzt, deshalb die Auswertung persetTimeoutverzögern oder einenPerformanceObservernutzen. - Genauigkeit: Zum Schutz vor Timing-Angriffen runden Browser die Werte ab. Firefox rundet ohne Cross-Origin-Isolation zum Beispiel auf 1 ms oder gröber. Ohne
Timing-Allow-Originkönnen Werte bei Cross-Origin-Weiterleitungen fehlen. - Nur für die Hauptnavigation: Bei Single-Page-Apps beschreibt der Eintrag nur den ersten Seitenaufruf. Routenwechsel auf der Client-Seite werden nicht erfasst.
- Veraltetes Gegenstück:
performance.timing.loadEventStartaus der Navigation Timing Level 1 ist veraltet und liefert absolute Unix-Zeitstempel. Verwende stattdessen diese Eigenschaft. - Browser-Unterstützung: Seiten aus dem Back/Forward-Cache erzeugen keinen neuen Navigationseintrag.