Start · Sprachen · JavaScript · Referenz · PerformanceTiming.domainLookupEnd

PerformanceTiming.domainLookupEnd

Eigenschaft

Veraltete, nur lesbare Eigenschaft: Zeitpunkt in Millisekunden seit der UNIX-Epoche, an dem die DNS-Abfrage für das Dokument endete.

seit JavaScript Veraltet (Navigation Timing Level 1), in allen Bro deprecated seit ja Kategorie: webapi

Signatur

PerformanceTiming.domainLookupEnd

Beschreibung

Die nur lesbare Eigenschaft performance.timing.domainLookupEnd gibt eine Zahl (unsigned long long) zurück. Sie gibt den Zeitpunkt in Millisekunden seit der UNIX-Epoche an, an dem die Domain-Auflösung (DNS-Abfrage) für das aktuelle Dokument abgeschlossen war.

Zusammen mit domainLookupStart lässt sich daraus die Dauer der DNS-Auflösung berechnen: domainLookupEnd - domainLookupStart. Das ist beim Analysieren der Ladezeit nützlich, etwa um langsame DNS-Server zu finden oder zu prüfen, ob dns-prefetch wirkt.

Bei einer persistenten Verbindung oder wenn die Antwort aus dem Cache oder einer lokalen Ressource kommt, findet keine DNS-Abfrage statt. Dann hat domainLookupEnd denselben Wert wie fetchStart.

Die gesamte PerformanceTiming-Schnittstelle gilt als veraltet. In neuem Code solltest du stattdessen PerformanceNavigationTiming.domainLookupEnd aus der Navigation Timing Level 2 verwenden. Du bekommst den Wert über performance.getEntriesByType("navigation"). Er ist ein hochauflösender DOMHighResTimeStamp, gemessen relativ zu performance.timeOrigin.

Rückgabewert

Typ
number
Beschreibung
Zeitpunkt in Millisekunden seit der UNIX-Epoche (ganze Zahl), an dem die DNS-Abfrage beendet war. Gab es keine DNS-Abfrage, ist der Wert gleich fetchStart.

Beispiele

Dauer der DNS-Abfrage ermitteln (veraltete API)

window.addEventListener("load", () => {
  const { domainLookupStart, domainLookupEnd } = performance.timing;
  const dnsDauer = domainLookupEnd - domainLookupStart;
  console.log(`DNS-Abfrage: ${dnsDauer} ms`);
});
DNS-Abfrage: 12 ms

Moderne Alternative mit PerformanceNavigationTiming

const [nav] = performance.getEntriesByType("navigation");
if (nav) {
  const dns = nav.domainLookupEnd - nav.domainLookupStart;
  console.log(`DNS-Abfrage: ${dns.toFixed(2)} ms`);
}
DNS-Abfrage: 11.70 ms

Fallback: erst neue API versuchen, dann alte

const dnsDauer = () => {
  const [nav] = performance.getEntriesByType?.("navigation") ?? [];
  if (nav) return nav.domainLookupEnd - nav.domainLookupStart;
  const t = performance.timing;
  return t.domainLookupEnd - t.domainLookupStart;
};

window.addEventListener("load", () => {
  const ms = dnsDauer();
  console.log(ms === 0 ? "Keine DNS-Abfrage (Cache/Keep-Alive)" : `DNS: ${ms} ms`);
});
Keine DNS-Abfrage (Cache/Keep-Alive)

// Wichtig · Fallstricke

  • Veraltet: performance.timing ist deprecated und kann in künftigen Browserversionen entfernt werden. Nutze stattdessen PerformanceNavigationTiming. Heute wird die alte API aber noch von allen gängigen Browsern unterstützt.
  • Die Werte sind absolute Zeitstempel in Millisekunden seit der Epoche und nur auf ganze Millisekunden genau. Die neue API liefert relative, hochauflösende Werte. Mische beide Arten nicht in einer Rechnung.
  • Kommt die Antwort aus dem Cache, über eine wiederverwendete Verbindung oder wurde die DNS-Auflösung vorab erledigt (dns-prefetch), ist die berechnete Dauer oft 0.
  • Lies den Wert frühestens nach dem load-Ereignis aus. Davor sind manche Felder von PerformanceTiming noch 0.
  • Der Wert gilt nur für das Hauptdokument. Die DNS-Zeiten einzelner Ressourcen findest du in PerformanceResourceTiming. Bei fremden Domains ohne Timing-Allow-Origin-Header sind diese Werte dort 0.