Start · Sprachen · JavaScript · Referenz · PerformanceTiming.responseEnd

PerformanceTiming.responseEnd

Eigenschaft

Veraltete, nur lesbare Eigenschaft: Zeitpunkt in Millisekunden seit der UNIX-Epoche, zu dem der Browser das letzte Byte der Antwort erhalten hat oder die Verbindung geschlossen wurde.

seit JavaScript Veraltet (Navigation Timing Level 1); weiterhin in deprecated seit ja Kategorie: webapi

Signatur

PerformanceTiming.responseEnd

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());
1717430400123 2024-06-03T16:00:00.123Z

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`);
});
Download: 12 ms Anfrage bis Antwortende: 85 ms Navigation bis Antwortende: 143 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()));
{ source: 'Level 2', ms: 142.7, download: 11.9 }

// Wichtig · Fallstricke

  • Veraltet: performance.timing sollte in neuem Code nicht mehr verwendet werden. Nutze stattdessen performance.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 responseStart und responseEnd fast identisch sein. Eine Download-Dauer von 0 ms ist dann normal.
  • responseEnd betrifft nur das Hauptdokument. Für Bilder, Skripte usw. nutzt man PerformanceResourceTiming.responseEnd. Bei Ressourcen von fremden Origins werden manche Zeitwerte nur mit dem Header Timing-Allow-Origin offengelegt.
  • Die Eigenschaft wird in allen gängigen Browsern weiterhin unterstützt, könnte aber in Zukunft entfernt werden.