Signatur
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
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`);
}
}
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 });
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');
}
// Wichtig · Fallstricke
- Cross-Origin: Bei Ressourcen fremder Ursprünge ist
redirectEnd0, sofern der Server nicht den HeaderTiming-Allow-Originsendet. Das gilt auch, wenn nur ein Glied der Umleitungskette fremd ist. 0ist kein Zeitpunkt: Vor Berechnungen immer prüfen, ob der Wert größer als0ist – 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.
redirectCountgibt es nur aufPerformanceNavigationTiming. - Puffergröße: Der Resource-Timing-Puffer ist begrenzt (standardmäßig meist 250 Einträge); ggf. mit
performance.setResourceTimingBufferSize()erhöhen oder einenPerformanceObservernutzen. - Die Genauigkeit der Zeitstempel kann aus Sicherheitsgründen (Spectre-Schutz) gerundet sein.