Start · Sprachen · JavaScript · Referenz · PerformanceTiming.connectStart

PerformanceTiming.connectStart

Eigenschaft

Veraltete, schreibgeschützte Eigenschaft: Zeitstempel in ms seit UNIX-Epoch, an dem der Browser begonnen hat, die Verbindung zum Server für das Dokument aufzubauen.

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

Signatur

PerformanceTiming.connectStart

Beschreibung

Die schreibgeschützte Eigenschaft performance.timing.connectStart liefert den Zeitpunkt, an dem der Browser begonnen hat, eine Netzwerkverbindung (TCP, ggf. inklusive TLS-Handshake) zum Server aufzubauen, um das aktuelle Dokument abzurufen. Der Wert wird in Millisekunden seit dem UNIX-Epoch (1. Januar 1970, UTC) angegeben, also als absoluter Zeitstempel.

Wird eine bestehende, dauerhafte Verbindung wiederverwendet (Keep-Alive) oder kommt das Dokument aus dem Cache, gibt es keinen neuen Verbindungsaufbau. connectStart hat dann denselben Wert wie domainLookupEnd. Zusammen mit connectEnd lässt sich die Dauer des Verbindungsaufbaus messen, zusammen mit domainLookupEnd eine mögliche Lücke zwischen DNS-Auflösung und Verbindungsbeginn.

Das Interface PerformanceTiming gilt als veraltet. In neuem Code solltest du stattdessen PerformanceNavigationTiming.connectStart verwenden (über performance.getEntriesByType("navigation")). Diese Variante liefert hochauflösende Werte vom Typ DOMHighResTimeStamp relativ zu performance.timeOrigin statt absoluter Epoch-Millisekunden.

Rückgabewert

Typ
number
Beschreibung
Ganzzahliger Zeitstempel (in der Spezifikation unsigned long long) in Millisekunden seit dem UNIX-Epoch. Wurde keine neue Verbindung aufgebaut, ist der Wert gleich domainLookupEnd.

Beispiele

Dauer des Verbindungsaufbaus messen (veraltete API)

window.addEventListener("load", () => {
  const t = performance.timing;
  // Dauer des TCP-/TLS-Verbindungsaufbaus
  const connectDauer = t.connectEnd - t.connectStart;
  console.log(`connectStart: ${t.connectStart}`);
  console.log(`Verbindungsaufbau: ${connectDauer} ms`);
});
connectStart: 1718000000123 Verbindungsaufbau: 42 ms

Wiederverwendete Verbindung erkennen

window.addEventListener("load", () => {
  const { connectStart, connectEnd, domainLookupEnd } = performance.timing;
  if (connectStart === domainLookupEnd && connectStart === connectEnd) {
    console.log("Keine neue Verbindung – Keep-Alive oder Cache.");
  } else {
    console.log(`Neue Verbindung in ${connectEnd - connectStart} ms aufgebaut.`);
  }
});
Neue Verbindung in 38 ms aufgebaut.

Moderne Alternative mit PerformanceNavigationTiming

const messeVerbindung = () => {
  const [nav] = performance.getEntriesByType("navigation");
  if (!nav) return;
  // Werte sind relativ zu performance.timeOrigin (hochauflösend)
  const tcp = nav.connectEnd - nav.connectStart;
  const tls = nav.secureConnectionStart > 0
    ? nav.connectEnd - nav.secureConnectionStart
    : 0;
  console.log(`TCP gesamt: ${tcp.toFixed(1)} ms, davon TLS: ${tls.toFixed(1)} ms`);
};

window.addEventListener("load", messeVerbindung);
TCP gesamt: 41.7 ms, davon TLS: 23.4 ms

// Wichtig · Fallstricke

  • Veraltet: PerformanceTiming und performance.timing stammen aus Navigation Timing Level 1 und sind als veraltet markiert. Sie funktionieren in den Browsern zwar noch, können aber entfernt werden. Nutze PerformanceNavigationTiming.
  • Einheiten nicht mischen: performance.timing.connectStart ist ein absoluter Epoch-Wert, PerformanceNavigationTiming.connectStart dagegen ein relativer DOMHighResTimeStamp. Werte aus beiden APIs darfst du nicht direkt voneinander abziehen.
  • Nicht zu früh auslesen: Liest du Werte aus, bevor die Navigation abgeschlossen ist (z. B. loadEventEnd), können sie noch 0 sein. Werte deshalb im oder nach dem load-Event auswerten.
  • Keine neue Verbindung: Bei Keep-Alive, HTTP/2-Multiplexing, bfcache oder Service-Worker-Antworten ist connectStart === domainLookupEnd. Die gemessene Dauer ist dann 0.
  • TLS: Der TLS-Handshake liegt zwischen connectStart und connectEnd. Seinen Beginn markiert secureConnectionStart.
  • Datenschutz: Die Zeitauflösung kann von Browsern absichtlich verringert werden (Schutz vor Fingerprinting und Timing-Angriffen).
  • Nur im Fenster-Kontext verfügbar, nicht in Web Workern.