Start · Sprachen · JavaScript · Referenz · PerformanceResourceTiming.finalResponseHeadersStart

PerformanceResourceTiming.finalResponseHeadersStart

Eigenschaft

Nur lesbarer Zeitstempel (<code>DOMHighResTimeStamp</code>), unmittelbar nachdem der Browser das erste Byte der endgültigen Antwort (z. B. <code>200 OK</code>) vom Server erhalten hat.

seit JavaScript Chromium 115+ (Chrome, Edge, Opera); nicht Baselin Kategorie: webapi

Signatur

PerformanceResourceTiming.finalResponseHeadersStart

Beschreibung

Die Eigenschaft finalResponseHeadersStart eines PerformanceResourceTiming-Eintrags gibt an, wann das erste Byte der endgültigen HTTP-Antwort angekommen ist. Gemeint ist die Antwort mit einem abschließenden Statuscode (2xx, 3xx, 4xx, 5xx), nicht aber eine vorläufige 1xx-Antwort wie 103 Early Hints.

Mit Early Hints hat sich die Bedeutung von responseStart verändert: Es markiert jetzt das erste Byte irgendeiner Antwort, also bei Bedarf auch das der vorläufigen 103-Antwort. Damit man die tatsächliche Server-Verarbeitungszeit bis zur endgültigen Antwort weiterhin messen kann, gibt es finalResponseHeadersStart. Zusammen mit firstInterimResponseStart lässt sich sauber auseinanderhalten, wann die Early Hints ankamen und wann die eigentliche Antwort folgte.

Typische Anwendungsfälle:

  • Die „echte“ Time to First Byte (TTFB) der endgültigen Antwort berechnen, auch wenn Early Hints aktiv sind.
  • Messen, wie viel Zeit Early Hints gewinnen, als Abstand zwischen firstInterimResponseStart und finalResponseHeadersStart.
  • Die Leistung im Feld (RUM) über PerformanceObserver für Navigationen und Ressourcen erfassen.

Weil PerformanceNavigationTiming von PerformanceResourceTiming erbt, gibt es die Eigenschaft auch im Navigationseintrag des Dokuments selbst. Dort ist sie am aufschlussreichsten, denn Early Hints werden praktisch nur für Navigationen versendet.

Rückgabewert

Typ
DOMHighResTimeStamp (number)
Beschreibung
Zeit in Millisekunden relativ zu performance.timeOrigin, gemessen unmittelbar nach dem ersten Byte der endgültigen Antwort. Gab es keine vorläufige Antwort, ist der Wert gleich responseStart. Bei ursprungsfremden Ressourcen ohne passenden Timing-Allow-Origin-Header ist er 0.

Beispiele

TTFB der endgültigen Navigationsantwort ermitteln

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

if (nav && 'finalResponseHeadersStart' in nav) {
  // TTFB der endgültigen Antwort, unabhängig von Early Hints
  const finalTtfb = nav.finalResponseHeadersStart - nav.startTime;
  console.log(`Endgültige TTFB: ${finalTtfb.toFixed(1)} ms`);
} else {
  // Fallback für Browser ohne Unterstützung
  console.log(`TTFB (Fallback): ${nav.responseStart.toFixed(1)} ms`);
}
Endgültige TTFB: 182.4 ms

Zeitgewinn durch 103 Early Hints messen

const [nav] = performance.getEntriesByType('navigation');
const interim = nav.firstInterimResponseStart ?? 0;
const final = nav.finalResponseHeadersStart ?? 0;

if (interim > 0 && final > 0) {
  console.log(`Early Hints kamen ${(final - interim).toFixed(1)} ms vor der endgültigen Antwort an.`);
} else {
  console.log('Keine Early Hints empfangen oder keine Browser-Unterstützung.');
}
Early Hints kamen 143.7 ms vor der endgültigen Antwort an.

Ressourcen per PerformanceObserver überwachen

const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    const final = entry.finalResponseHeadersStart;
    if (!final) continue; // 0 = ohne Timing-Allow-Origin oder nicht unterstützt

    const serverWait = final - entry.requestStart;
    console.log(`${entry.name}: Server-Wartezeit ${serverWait.toFixed(1)} ms`);
  }
});

observer.observe({ type: 'resource', buffered: true });
https://example.com/app.js: Server-Wartezeit 45.2 ms

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Die Eigenschaft gibt es bislang nur in Chromium-basierten Browsern ab Version 115. In Firefox und Safari ist sie undefined. Prüfe deshalb vor der Nutzung mit 'finalResponseHeadersStart' in entry und falle bei Bedarf auf responseStart zurück.
  • Ursprungsfremde Ressourcen: Ohne den Antwort-Header Timing-Allow-Origin liefert die Eigenschaft 0. Wer daraus Differenzen berechnet, ohne vorher zu prüfen, bekommt negative oder unsinnige Werte.
  • Verhältnis zu responseStart: Ohne vorläufige 1xx-Antwort sind beide Werte gleich. Mit Early Hints ist responseStart kleiner, weil es das erste Byte der 103-Antwort markiert. Bestehende TTFB-Auswertungen auf Basis von responseStart können sich dadurch scheinbar verbessern.
  • Weiterleitungen: Der Wert bezieht sich auf die endgültige Antwort der letzten Anfrage. Zwischengeschaltete 3xx-Weiterleitungen fließen über redirectStart/redirectEnd in die Gesamtzeit ein.
  • Die Zeitstempel können aus Datenschutzgründen gerundet werden (Schutz vor Timing-Angriffen). Mit ganz kleinen Differenzen sollte man daher vorsichtig umgehen.