Start · Sprachen · JavaScript · Referenz · PerformanceResourceTiming.redirectEnd

PerformanceResourceTiming.redirectEnd

Eigenschaft

Liefert einen <code>DOMHighResTimeStamp</code> direkt nach dem Empfang des letzten Bytes der Antwort der letzten HTTP-Umleitung, oder <code>0</code>, falls es keine Umleitung gab.

seit JavaScript Baseline: alle modernen Browser (Resource Timing L Kategorie: webapi

Signatur

PerformanceResourceTiming.redirectEnd

Beschreibung

Die schreibgeschützte Eigenschaft redirectEnd eines PerformanceResourceTiming-Eintrags gibt an, wann die letzte HTTP-Umleitung (z. B. 301, 302, 307, 308) einer Ressource abgeschlossen war – genauer: den Zeitpunkt direkt nach dem Empfang des letzten Bytes der Antwort der letzten Umleitung. Der Wert ist ein DOMHighResTimeStamp in Millisekunden relativ zu performance.timeOrigin.

Zusammen mit redirectStart lässt sich so die gesamte Zeit berechnen, die ein Request in Umleitungsketten verbracht hat: redirectEnd - redirectStart. Das ist nützlich, um unnötige Redirects aufzuspüren – etwa von http:// auf https://, von example.com auf www.example.com oder durch fehlende abschließende Schrägstriche in URLs. Jede Umleitung kostet mindestens einen zusätzlichen Roundtrip.

Gibt es keine Umleitung, oder stammt eine der Umleitungen von einem anderen Ursprung, der die Timing-Daten nicht per Timing-Allow-Origin freigibt, ist der Wert 0. Die Eigenschaft steht auch auf PerformanceNavigationTiming zur Verfügung (das von PerformanceResourceTiming erbt) und misst dort Umleitungen bei der Navigation zum Dokument selbst.

Rückgabewert

Typ
DOMHighResTimeStamp (number)
Beschreibung
Zeitstempel in Millisekunden (relativ zu performance.timeOrigin) nach Empfang des letzten Bytes der letzten Umleitungsantwort, oder 0, wenn keine Umleitung stattfand oder die Daten aus Datenschutzgründen nicht verfügbar sind.

Beispiele

Umleitungsdauer aller geladenen Ressourcen ermitteln

const eintraege = performance.getEntriesByType('resource');

for (const eintrag of eintraege) {
  if (eintrag.redirectEnd > 0) {
    const dauer = eintrag.redirectEnd - eintrag.redirectStart;
    console.log(`${eintrag.name}: ${dauer.toFixed(1)} ms in Umleitungen`);
  }
}
https://cdn.example.com/lib.js: 84.3 ms in Umleitungen

Neue Ressourcen mit PerformanceObserver überwachen

const observer = new PerformanceObserver((liste) => {
  for (const eintrag of liste.getEntries()) {
    const dauer = eintrag.redirectEnd - eintrag.redirectStart;
    if (dauer > 0) {
      console.warn(`Redirect erkannt: ${eintrag.name} (${Math.round(dauer)} ms)`);
    }
  }
});

observer.observe({ type: 'resource', buffered: true });
Redirect erkannt: https://example.com/bilder/logo.png (112 ms)

Umleitung bei der Seitennavigation messen

const [nav] = performance.getEntriesByType('navigation');

if (nav && nav.redirectCount > 0) {
  const dauer = nav.redirectEnd - nav.redirectStart;
  console.log(`${nav.redirectCount} Umleitung(en), ${dauer.toFixed(0)} ms`);
} else {
  console.log('Keine Umleitung bei der Navigation');
}
1 Umleitung(en), 63 ms

// Wichtig · Fallstricke

  • Cross-Origin: Bei Ressourcen fremder Ursprünge ist redirectEnd 0, sofern der Server nicht den Header Timing-Allow-Origin sendet. Das gilt auch, wenn nur ein Glied der Umleitungskette fremd ist.
  • 0 ist kein Zeitpunkt: Vor Berechnungen immer prüfen, ob der Wert größer als 0 ist – sonst entstehen unsinnige (negative oder riesige) Differenzen.
  • Kein Einzel-Redirect-Timing: Bei Ketten mehrerer Umleitungen wird nur der Gesamtzeitraum erfasst; Details zu einzelnen Sprüngen sind nicht verfügbar. redirectCount gibt es nur auf PerformanceNavigationTiming.
  • Puffergröße: Der Resource-Timing-Puffer ist begrenzt (standardmäßig meist 250 Einträge); ggf. mit performance.setResourceTimingBufferSize() erhöhen oder einen PerformanceObserver nutzen.
  • Die Genauigkeit der Zeitstempel kann aus Sicherheitsgründen (Spectre-Schutz) gerundet sein.