Signatur
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
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`);
}
}
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 });
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());
// Wichtig · Fallstricke
- Cross-Origin: Bei Ressourcen von fremden Ursprüngen ist der Wert
0, wenn der Server keinen passendenTiming-Allow-Origin-Header sendet. Vor dem Rechnen auf0prüfen, sonst entstehen unsinnige Werte. - Dauer 0 ist normal: Bei wiederverwendeten Verbindungen, DNS-Cache oder Cache-Treffern fällt keine DNS-Abfrage an;
domainLookupStartunddomainLookupEndsind dann gleich. - Puffergröße: Der Resource-Timing-Puffer fasst standardmäßig ca. 250 Einträge. Mit
performance.setResourceTimingBufferSize()vergrößern oder besserPerformanceObservernutzen. - Für das Hauptdokument steht derselbe Wert in
PerformanceNavigationTiming.domainLookupEndzur Verfügung. - Unterstützt in allen modernen Browsern sowie in Web Workern; in Node.js über
perf_hooksnur eingeschränkt relevant.