Signatur
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
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`);
});
Download-Dauer des HTML-Dokuments
window.addEventListener("load", () => {
const { responseStart, responseEnd } = performance.timing;
console.log(`Download: ${responseEnd - responseStart} 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`);
});
// Wichtig · Fallstricke
- Veraltet:
PerformanceTimingwurde durchPerformanceNavigationTiming(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
requestStartodernavigationStart. Wegen der geringen Auflösung können kleine Zeitspannen als0erscheinen. - Wird die Eigenschaft sehr früh ausgelesen (vor dem ersten Byte), ist der Wert
0. Lies sie deshalb am besten erst imload-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 einTiming-Allow-Origin-Header nötig, sonst ist der Wert0.