Start · Sprachen · JavaScript · Referenz · PerformanceTiming.responseStart

PerformanceTiming.responseStart

Eigenschaft

Veralteter, schreibgeschützter Zeitstempel (ms seit UNIX-Epoch), zu dem der Browser das erste Byte der Antwort vom Server, Cache oder einer lokalen Ressource empfangen hat.

seit JavaScript Veraltet (Navigation Timing Level 1) – noch in all deprecated seit ja Kategorie: webapi

Signatur

PerformanceTiming.responseStart

Beschreibung

Die schreibgeschützte Eigenschaft performance.timing.responseStart liefert eine Zahl (unsigned long long). Sie gibt an, wann der Browser das erste Byte der Antwort auf die Navigationsanfrage erhalten hat, gemessen in Millisekunden seit dem UNIX-Epoch. Dabei ist egal, ob die Antwort vom Server, aus dem HTTP-Cache oder aus einer lokalen Ressource kommt.

Zusammen mit requestStart ergibt sich die sogenannte Time to First Byte (TTFB) ab Beginn der Anfrage. Zusammen mit navigationStart erhältst du die gesamte Wartezeit bis zum ersten Byte, also inklusive Weiterleitungen, DNS-Auflösung und Verbindungsaufbau. Die Differenz zu responseEnd zeigt, wie lange der Download des Dokuments gedauert hat.

Die gesamte Schnittstelle PerformanceTiming gilt als veraltet. Für neuen Code solltest du PerformanceNavigationTiming verwenden, das du über performance.getEntriesByType("navigation") erhältst. Dort ist responseStart ein hochauflösender DOMHighResTimeStamp, der relativ zu performance.timeOrigin gemessen wird.

Rückgabewert

Typ
number
Beschreibung
Zeitstempel in Millisekunden seit dem UNIX-Epoch (ganzzahlig). 0, solange noch kein Byte der Antwort eingetroffen ist.

Beispiele

Time to First Byte mit der veralteten API messen

window.addEventListener("load", () => {
  const t = performance.timing;
  const ttfb = t.responseStart - t.requestStart;
  const gesamt = t.responseStart - t.navigationStart;
  console.log(`TTFB ab Anfrage: ${ttfb} ms`);
  console.log(`Bis zum ersten Byte ab Navigation: ${gesamt} ms`);
});
TTFB ab Anfrage: 84 ms Bis zum ersten Byte ab Navigation: 132 ms

Download-Dauer des HTML-Dokuments

window.addEventListener("load", () => {
  const { responseStart, responseEnd } = performance.timing;
  console.log(`Download: ${responseEnd - responseStart} ms`);
});
Download: 12 ms

Moderne Alternative mit Fallback

const getTTFB = () => {
  const [nav] = performance.getEntriesByType("navigation");
  if (nav) {
    // DOMHighResTimeStamp, relativ zu timeOrigin
    return nav.responseStart - nav.requestStart;
  }
  // Fallback für sehr alte Browser
  const t = performance.timing;
  return t.responseStart - t.requestStart;
};

window.addEventListener("load", () => {
  console.log(`TTFB: ${getTTFB().toFixed(1)} ms`);
});
TTFB: 83.7 ms

// Wichtig · Fallstricke

  • Veraltet: PerformanceTiming wurde durch PerformanceNavigationTiming (Navigation Timing Level 2) ersetzt. Die Eigenschaft funktioniert noch in allen gängigen Browsern, kann aber künftig entfernt werden.
  • Der Wert ist ein absoluter Epoch-Zeitstempel in ganzen Millisekunden. Aussagekräftig werden die Werte erst als Differenzen, etwa zu requestStart oder navigationStart. Wegen der geringen Auflösung können kleine Zeitspannen als 0 erscheinen.
  • Wird die Eigenschaft sehr früh ausgelesen (vor dem ersten Byte), ist der Wert 0. Lies sie deshalb am besten erst im load-Ereignis aus.
  • Kommt die Antwort aus dem Cache oder dem Back/Forward-Cache, kann die TTFB praktisch null sein. Das verzerrt Statistiken.
  • Die Eigenschaft bezieht sich nur auf das Hauptdokument. Für Unterressourcen verwendest du PerformanceResourceTiming.responseStart. Bei Ressourcen von fremden Ursprüngen ist ein Timing-Allow-Origin-Header nötig, sonst ist der Wert 0.