Signatur
Beschreibung
Die schreibgeschützte Eigenschaft domainLookupStart eines PerformanceResourceTiming-Eintrags gibt den Zeitpunkt an, direkt bevor der Browser mit der Namensauflösung (DNS-Lookup) für die Domain einer Ressource beginnt. Der Wert ist ein hochauflösender Zeitstempel in Millisekunden relativ zu performance.timeOrigin.
Zusammen mit domainLookupEnd lässt sich die DNS-Dauer einer Anfrage berechnen: domainLookupEnd - domainLookupStart. Das ist nützlich, um langsame DNS-Server, fehlende dns-prefetch-/preconnect-Hinweise oder zu viele verschiedene Drittanbieter-Domains zu erkennen.
Wird eine persistente Verbindung wiederverwendet oder stammt die Ressource aus dem Cache bzw. dem DNS-Cache, entspricht domainLookupStart in der Regel domainLookupEnd (und oft fetchStart) – die DNS-Dauer ist dann 0.
Rückgabewert
0 bei Cross-Origin-Ressourcen ohne passenden Timing-Allow-Origin-Header.Beispiele
DNS-Dauer aller geladenen Ressourcen ermitteln
const entries = performance.getEntriesByType('resource');
for (const entry of entries) {
const dns = entry.domainLookupEnd - entry.domainLookupStart;
if (dns > 0) {
console.log(`${entry.name}: DNS ${dns.toFixed(1)} ms`);
}
}
Neue Ressourcen per PerformanceObserver überwachen
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
const dns = entry.domainLookupEnd - entry.domainLookupStart;
if (dns > 50) {
console.warn(`Langsamer DNS-Lookup (${dns.toFixed(0)} ms) für ${new URL(entry.name).hostname}`);
}
}
});
observer.observe({ type: 'resource', buffered: true });
DNS-Zeit pro Domain aggregieren (Kandidaten für dns-prefetch)
const dnsPerHost = new Map();
for (const entry of performance.getEntriesByType('resource')) {
// Eingeschränkte Cross-Origin-Einträge (0-Werte) ausfiltern
if (entry.domainLookupStart === 0) continue;
const host = new URL(entry.name).hostname;
const dns = entry.domainLookupEnd - entry.domainLookupStart;
dnsPerHost.set(host, Math.max(dnsPerHost.get(host) ?? 0, dns));
}
console.table(Object.fromEntries(dnsPerHost));
// Wichtig · Fallstricke
- Cross-Origin-Einschränkung: Bei Ressourcen anderer Herkunft liefert die Eigenschaft
0, sofern der Server keinen HeaderTiming-Allow-Origin(z. B.Timing-Allow-Origin: *oder die eigene Origin) sendet. Vor Berechnungen immer auf0prüfen, sonst entstehen verfälschte Werte. - Bei wiederverwendeten Verbindungen, DNS-Cache oder HTTP-Cache ist die Differenz zu
domainLookupEnd0– das ist kein Fehler. - Der Zeitstempel ist relativ zu
performance.timeOrigin, nicht zur Unix-Epoche; für absolute Zeitenperformance.timeOrigin + wertverwenden. - Die Zeitauflösung kann aus Datenschutzgründen (Schutz vor Timing-Angriffen) gerundet sein, abhängig von Cross-Origin-Isolation.
- Der Ressourcen-Puffer ist standardmäßig begrenzt (oft 250 Einträge); mit
performance.setResourceTimingBufferSize()anpassen oder einenPerformanceObservernutzen. - Wird von allen modernen Browsern unterstützt, auch in Web Workern.