Start · Sprachen · JavaScript · Referenz · PerformanceResourceTiming.domainLookupEnd

PerformanceResourceTiming.domainLookupEnd

Eigenschaft

Liefert den Zeitstempel (<code>DOMHighResTimeStamp</code>) unmittelbar nach Abschluss der DNS-Abfrage für eine geladene Ressource.

seit JavaScript Baseline: alle modernen Browser (Resource Timing L Kategorie: webapi

Signatur

PerformanceResourceTiming.domainLookupEnd

Beschreibung

Die schreibgeschützte Eigenschaft domainLookupEnd eines PerformanceResourceTiming-Eintrags gibt an, wann der Browser die Namensauflösung (DNS-Abfrage) für den Host der Ressource beendet hat. Der Wert ist ein DOMHighResTimeStamp in Millisekunden relativ zu performance.timeOrigin.

Zusammen mit domainLookupStart lässt sich die DNS-Dauer berechnen: domainLookupEnd - domainLookupStart. Das ist nützlich, um langsame DNS-Auflösung bei Drittanbieter-Domains (CDNs, Analytics, Werbung) zu erkennen und gezielt mit <link rel="dns-prefetch"> oder <link rel="preconnect"> gegenzusteuern.

Wurde keine DNS-Abfrage durchgeführt – etwa weil die Verbindung wiederverwendet wurde (Keep-Alive, HTTP/2), das Ergebnis im DNS-Cache lag oder die Ressource aus dem HTTP-Cache kam –, sind domainLookupStart und domainLookupEnd identisch mit fetchStart, die berechnete Dauer ist dann 0.

Rückgabewert

Typ
DOMHighResTimeStamp (number)
Beschreibung
Zeitpunkt in Millisekunden direkt nach Ende der DNS-Abfrage. 0 bei ursprungsübergreifenden Ressourcen ohne passenden Timing-Allow-Origin-Header.

Beispiele

DNS-Dauer aller geladenen Ressourcen ausgeben

const entries = performance.getEntriesByType('resource');

for (const entry of entries) {
  const dns = entry.domainLookupEnd - entry.domainLookupStart;
  if (dns > 0) {
    console.log(`${new URL(entry.name).host}: ${dns.toFixed(1)} ms DNS`);
  }
}
cdn.example.com: 23.4 ms DNS fonts.gstatic.com: 41.8 ms DNS

Neue Ressourcen mit PerformanceObserver überwachen

const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    const dns = entry.domainLookupEnd - entry.domainLookupStart;
    if (dns > 50) {
      console.warn(`Langsame DNS-Auflösung (${dns.toFixed(0)} ms): ${entry.name}`);
    }
  }
});

observer.observe({ type: 'resource', buffered: true });
Langsame DNS-Auflösung (87 ms): https://tracker.example.net/pixel.js

Fehlende Timing-Daten bei Cross-Origin erkennen

const summarizeDns = () => {
  const result = { gemessen: 0, verborgen: 0 };
  for (const entry of performance.getEntriesByType('resource')) {
    // Ohne Timing-Allow-Origin sind die Detailwerte 0
    if (entry.domainLookupEnd === 0 && entry.startTime > 0) {
      result.verborgen++;
    } else {
      result.gemessen++;
    }
  }
  return result;
};

console.log(summarizeDns());
{ gemessen: 12, verborgen: 3 }

// Wichtig · Fallstricke

  • Cross-Origin: Bei Ressourcen von fremden Ursprüngen ist der Wert 0, wenn der Server keinen passenden Timing-Allow-Origin-Header sendet. Vor dem Rechnen auf 0 prüfen, sonst entstehen unsinnige Werte.
  • Dauer 0 ist normal: Bei wiederverwendeten Verbindungen, DNS-Cache oder Cache-Treffern fällt keine DNS-Abfrage an; domainLookupStart und domainLookupEnd sind dann gleich.
  • Puffergröße: Der Resource-Timing-Puffer fasst standardmäßig ca. 250 Einträge. Mit performance.setResourceTimingBufferSize() vergrößern oder besser PerformanceObserver nutzen.
  • Für das Hauptdokument steht derselbe Wert in PerformanceNavigationTiming.domainLookupEnd zur Verfügung.
  • Unterstützt in allen modernen Browsern sowie in Web Workern; in Node.js über perf_hooks nur eingeschränkt relevant.