Signatur
Beschreibung
Die Eigenschaft PerformanceTiming.responseEnd liefert einen unsigned long long-Wert: den Zeitpunkt in Millisekunden seit der UNIX-Epoche (1. Januar 1970, UTC), zu dem der Browser das letzte Byte der Antwort vom Server, aus dem HTTP-Cache oder aus einer lokalen Ressource erhalten hat. Wird die Verbindung vorher geschlossen, gilt stattdessen der Zeitpunkt, an dem sie geschlossen wurde.
Zusammen mit responseStart lässt sich die Download-Dauer des HTML-Dokuments berechnen (responseEnd - responseStart). Mit requestStart bekommt man die Zeit vom Absenden der Anfrage bis zum vollständigen Empfang, mit navigationStart die Zeit von Beginn der Navigation bis zum Ende der Antwort.
Die Schnittstelle PerformanceTiming und damit performance.timing ist veraltet. Für neuen Code nutzt man PerformanceNavigationTiming (Navigation Timing Level 2). Dort heißt die Eigenschaft ebenfalls responseEnd, ist aber ein hochauflösender DOMHighResTimeStamp relativ zu performance.timeOrigin und kein absoluter Epoch-Wert.
Beispiele
Rohwert auslesen
// Absoluter Zeitpunkt, zu dem das letzte Antwort-Byte ankam
const { responseEnd } = performance.timing;
console.log(responseEnd);
console.log(new Date(responseEnd).toISOString());
Download-Dauer und Zeit bis zum vollständigen Empfang
window.addEventListener('load', () => {
const t = performance.timing;
const download = t.responseEnd - t.responseStart;
const requestToEnd = t.responseEnd - t.requestStart;
const sinceNavigation = t.responseEnd - t.navigationStart;
console.log(`Download: ${download} ms`);
console.log(`Anfrage bis Antwortende: ${requestToEnd} ms`);
console.log(`Navigation bis Antwortende: ${sinceNavigation} ms`);
});
Moderne Alternative mit Fallback
const getResponseEnd = () => {
const [nav] = performance.getEntriesByType('navigation');
if (nav) {
// Relativ zu performance.timeOrigin, hochauflösend
return { source: 'Level 2', ms: nav.responseEnd, download: nav.responseEnd - nav.responseStart };
}
// Fallback für sehr alte Browser
const t = performance.timing;
return { source: 'Level 1', ms: t.responseEnd - t.navigationStart, download: t.responseEnd - t.responseStart };
};
window.addEventListener('load', () => console.log(getResponseEnd()));
// Wichtig · Fallstricke
- Veraltet:
performance.timingsollte in neuem Code nicht mehr verwendet werden. Nutze stattdessenperformance.getEntriesByType('navigation')[0].responseEnd. Die Werte lassen sich nicht direkt vergleichen: Level 1 liefert absolute Epoch-Millisekunden, Level 2 relative, hochauflösende Zeitstempel. - Der Wert ist eine absolute Uhrzeit und hängt von der Systemuhr ab. Wird die Uhr verstellt, können die Differenzen verfälscht werden. Rechne deshalb immer mit Differenzen zu anderen
PerformanceTiming-Werten. - Kommt die Antwort aus dem Cache, können
responseStartundresponseEndfast identisch sein. Eine Download-Dauer von 0 ms ist dann normal. responseEndbetrifft nur das Hauptdokument. Für Bilder, Skripte usw. nutzt manPerformanceResourceTiming.responseEnd. Bei Ressourcen von fremden Origins werden manche Zeitwerte nur mit dem HeaderTiming-Allow-Originoffengelegt.- Die Eigenschaft wird in allen gängigen Browsern weiterhin unterstützt, könnte aber in Zukunft entfernt werden.