Signatur
Beschreibung
Die Eigenschaft redirectStart eines PerformanceResourceTiming-Eintrags gibt an, wann der Abruf gestartet wurde, der die erste HTTP-Umleitung (z. B. 301, 302, 307, 308) ausgelöst hat. Der Wert ist ein DOMHighResTimeStamp in Millisekunden relativ zu performance.timeOrigin.
Zusammen mit redirectEnd (Empfang des letzten Bytes der Antwort auf die letzte Umleitung) lässt sich berechnen, wie viel Zeit durch Umleitungsketten verloren geht: redirectEnd - redirectStart. Das ist praktisch, wenn Bilder, Skripte oder API-Aufrufe über URL-Kürzer, HTTP→HTTPS-Weiterleitungen oder CDN-Umleitungen laufen und dabei unnötig Zeit kosten.
Gibt es keine Umleitung, ist der Wert 0. Bei Umleitungen ist redirectStart meist gleich startTime. Die Eigenschaft ist schreibgeschützt; man erhält die Einträge über performance.getEntriesByType("resource") oder einen PerformanceObserver.
Rückgabewert
0, wenn keine Umleitung stattfand oder eine Umleitung zu einer anderen Origin ohne Timing-Allow-Origin die Werte verbirgt.Beispiele
Umleitungsdauer aller geladenen Ressourcen ermitteln
const resources = performance.getEntriesByType("resource");
for (const entry of resources) {
if (entry.redirectStart > 0) {
const dauer = entry.redirectEnd - entry.redirectStart;
console.log(`${entry.name}: Umleitung ${dauer.toFixed(1)} ms`);
}
}
Umleitungen laufend mit PerformanceObserver überwachen
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
if (entry.redirectStart === 0) continue; // keine Umleitung
const dauer = entry.redirectEnd - entry.redirectStart;
if (dauer > 100) {
console.warn(`Langsame Umleitung (${Math.round(dauer)} ms):`, entry.name);
}
}
});
observer.observe({ type: "resource", buffered: true });
Umleitung für einen konkreten fetch-Aufruf prüfen
const url = "/api/alt-endpunkt"; // leitet z. B. per 301 weiter
await fetch(url);
const [entry] = performance.getEntriesByName(new URL(url, location.href).href);
console.log(entry.redirectStart > 0
? `Umgeleitet, Start bei ${entry.redirectStart.toFixed(1)} ms`
: "Keine Umleitung gemessen");
// Wichtig · Fallstricke
- Cross-Origin: Liegt eine Umleitung oder die Ressource auf einer fremden Origin, liefert
redirectStart0, es sei denn, alle beteiligten Server senden einen passendenTiming-Allow-Origin-Header. 0ist mehrdeutig: Der Wert kann „keine Umleitung“ oder „Timing verborgen“ bedeuten. Prüfe vor Berechnungen immer auf> 0, sonst entstehen unsinnige Differenzen.- Für das Hauptdokument nutzt man besser
PerformanceNavigationTiming.redirectStartbzw.redirectCount. Das ältereperformance.timing.redirectStartist veraltet und liefert Unix-Zeitstempel statt relativer Werte. - Der Resource-Timing-Puffer ist begrenzt (standardmäßig meist 250 Einträge). Bei vielen Ressourcen
performance.setResourceTimingBufferSize()verwenden oder mitPerformanceObserverarbeiten. - Browser: in allen modernen Browsern unterstützt, auch in Web Workern verfügbar.