Start · Sprachen · JavaScript · Referenz · PerformanceNavigationTiming.unloadEventStart

PerformanceNavigationTiming.unloadEventStart

Eigenschaft

Liefert einen <code>DOMHighResTimeStamp</code> für den Zeitpunkt unmittelbar vor dem Start des <code>unload</code>-Handlers des vorherigen Dokuments.

seit JavaScript Navigation Timing Level 2 – Baseline: alle moderne Kategorie: webapi

Signatur

PerformanceNavigationTiming.unloadEventStart

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

Typ
DOMHighResTimeStamp (number)
Beschreibung
Zeitstempel in Millisekunden relativ zum Navigationsbeginn, unmittelbar vor Beginn des 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.");
}
Unload der vorherigen Seite: 3.4 ms

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 });
unloadEventStart: 12.3 unloadEventEnd: 12.9

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 unload kann 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 auf 0 prüfen, sonst entstehen falsche Differenzen.
  • Das unload-Ereignis gilt als veraltet: Chrome baut es schrittweise ab, und es verhindert den Back/Forward-Cache. Besser pagehide bzw. visibilitychange verwenden.
  • 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.