Signatur
Beschreibung
Die schreibgeschützte Eigenschaft unloadEventStart des Interfaces PerformanceNavigationTiming gibt an, wann der Browser begonnen hat, den unload-Event-Handler des vorherigen Dokuments auszuführen. Der Wert ist ein DOMHighResTimeStamp in Millisekunden, relativ zu performance.timeOrigin (Beginn der Navigation).
Zusammen mit unloadEventEnd lässt sich messen, wie lange das Entladen der vorherigen Seite gedauert hat. Das ist nützlich, wenn aufwendige unload- oder beforeunload-Logik (z. B. Analytics-Aufrufe, synchrone XHRs) die nächste Navigation spürbar ausbremst.
Der Wert ist 0, wenn es kein vorheriges Dokument gibt (z. B. direkter Aufruf in einem neuen Tab), wenn das vorherige Dokument von einem anderen Ursprung stammte, oder wenn eine Weiterleitung über einen fremden Ursprung stattfand. Man erhält den Eintrag über performance.getEntriesByType("navigation") oder einen PerformanceObserver.
Rückgabewert
unload-Handlers des vorherigen Dokuments; 0, wenn kein gleich-originäres vorheriges Dokument existiert.Beispiele
Unload-Dauer der vorherigen Seite messen
const [nav] = performance.getEntriesByType("navigation");
if (nav && nav.unloadEventStart > 0) {
const dauer = nav.unloadEventEnd - nav.unloadEventStart;
console.log(`Unload der vorherigen Seite: ${dauer.toFixed(1)} ms`);
} else {
console.log("Kein gleich-originäres Vorgängerdokument – kein Unload-Wert.");
}
Per PerformanceObserver erfassen
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
console.log("unloadEventStart:", entry.unloadEventStart);
console.log("unloadEventEnd:", entry.unloadEventEnd);
}
});
// buffered: true liefert auch den bereits erzeugten Navigationseintrag
observer.observe({ type: "navigation", buffered: true });
Langsames Entladen an Analytics melden
window.addEventListener("load", () => {
const [nav] = performance.getEntriesByType("navigation");
if (!nav || nav.unloadEventStart === 0) return;
const unloadMs = nav.unloadEventEnd - nav.unloadEventStart;
if (unloadMs > 50) {
navigator.sendBeacon("/metrics", JSON.stringify({
metric: "slow-unload",
value: Math.round(unloadMs),
page: document.referrer
}));
}
});
// Wichtig · Fallstricke
- Der Wert bezieht sich auf das vorherige Dokument, nicht auf die aktuelle Seite. Den eigenen
unloadkann die Seite nicht selbst messen. - Bei Navigationen von einem fremden Ursprung (oder mit fremd-originärer Weiterleitung) ist der Wert aus Datenschutzgründen immer
0– vor dem Rechnen auf0prüfen, sonst entstehen falsche Differenzen. - Das
unload-Ereignis gilt als veraltet: Chrome baut es schrittweise ab, und es verhindert den Back/Forward-Cache. Besserpagehidebzw.visibilitychangeverwenden. - Die ältere Schnittstelle
performance.timing.unloadEventStart(Navigation Timing Level 1) ist veraltet und liefert absolute Epoch-Zeitstempel statt relativer Werte. - Die Genauigkeit der Zeitstempel kann von Browsern zum Schutz vor Timing-Angriffen reduziert werden.