Start · Sprachen · JavaScript · Referenz · PerformanceResourceTiming.redirectStart

PerformanceResourceTiming.redirectStart

Eigenschaft

Schreibgeschützter Zeitstempel (<code>DOMHighResTimeStamp</code>) für den Start des Abrufs, der die erste HTTP-Umleitung einer Ressource auslöst. Ohne Umleitung ist der Wert <code>0</code>.

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

Signatur

PerformanceResourceTiming.redirectStart

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

Typ
DOMHighResTimeStamp (number)
Beschreibung
Zeitstempel in Millisekunden für den Start der ersten Umleitung. 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`);
  }
}
https://example.com/logo.png: Umleitung 84.3 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 });
Langsame Umleitung (142 ms): http://cdn.example.com/app.js

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");
Umgeleitet, Start bei 1532.4 ms

// Wichtig · Fallstricke

  • Cross-Origin: Liegt eine Umleitung oder die Ressource auf einer fremden Origin, liefert redirectStart 0, es sei denn, alle beteiligten Server senden einen passenden Timing-Allow-Origin-Header.
  • 0 ist 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.redirectStart bzw. redirectCount. Das ältere performance.timing.redirectStart ist 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 mit PerformanceObserver arbeiten.
  • Browser: in allen modernen Browsern unterstützt, auch in Web Workern verfügbar.