Start · Sprachen · JavaScript · Referenz · NetworkInformation.rtt

NetworkInformation.rtt

Eigenschaft

Gibt die geschätzte effektive Round-Trip-Zeit der aktuellen Verbindung in Millisekunden zurück, gerundet auf das nächste Vielfache von 25 ms.

seit JavaScript Chromium-Browser (Chrome 61+, Edge 79+, Opera 48+) Kategorie: webapi

Signatur

NetworkInformation.rtt

Beschreibung

Die schreibgeschützte Eigenschaft rtt des NetworkInformation-Interfaces liefert die geschätzte effektive Round-Trip-Zeit (RTT), also die Zeit, die ein Datenpaket zum Server und zurück braucht. Der Wert ist in Millisekunden angegeben und auf das nächste Vielfache von 25 ms gerundet. Sie erreichen die Eigenschaft über navigator.connection.rtt, in Web Workern über self.navigator.connection.rtt.

Der Browser ermittelt den Wert aus Messungen auf Anwendungsebene, die er vor Kurzem beobachtet hat (etwa HTTP-Anfragen), und nicht aus der Art der Verbindung. So spiegelt rtt die tatsächliche Latenz meist besser wider als type. Liegen noch keine Messungen vor, schätzt der Browser den Wert anhand der zugrunde liegenden Verbindungstechnik.

Typische Einsatzgebiete sind adaptive Ladestrategien: Bei hoher Latenz können Sie weniger einzelne Anfragen stellen, Ressourcen bündeln, auf Prefetching verzichten oder längere Zeitlimits setzen. Zusammen mit downlink und effectiveType ergibt sich ein grobes Bild der Netzqualität. Ändert sich die Schätzung deutlich, wird am NetworkInformation-Objekt das Ereignis change ausgelöst.

Rückgabewert

Typ
number
Beschreibung
Geschätzte effektive Round-Trip-Zeit in Millisekunden, gerundet auf das nächste Vielfache von 25 (z. B. 50, 150, 300). Kann 0 sein, wenn keine Schätzung vorliegt oder der Browser den Wert zum Schutz der Privatsphäre verbirgt.

Beispiele

Aktuelle RTT mit Feature-Erkennung auslesen

const connection = navigator.connection;

if (connection && 'rtt' in connection) {
  console.log(`Geschätzte RTT: ${connection.rtt} ms`);
} else {
  console.log('Network Information API wird nicht unterstützt.');
}
Geschätzte RTT: 100 ms

Prefetching bei hoher Latenz abschalten

const HIGH_LATENCY_MS = 400;

const shouldPrefetch = () => {
  const conn = navigator.connection;
  // Ohne API-Unterstützung optimistisch vorladen
  if (!conn) return true;
  if (conn.saveData) return false;
  return conn.rtt === 0 || conn.rtt < HIGH_LATENCY_MS;
};

if (shouldPrefetch()) {
  const link = document.createElement('link');
  link.rel = 'prefetch';
  link.href = '/artikel/naechste-seite.html';
  document.head.append(link);
  console.log('Prefetch aktiviert');
} else {
  console.log('Prefetch übersprungen (hohe Latenz oder Datensparmodus)');
}
Prefetch aktiviert

Auf Änderungen der RTT reagieren

const conn = navigator.connection;

const logConnection = () => {
  console.log(`RTT: ${conn.rtt} ms, Downlink: ${conn.downlink} Mbit/s, Typ: ${conn.effectiveType}`);
};

if (conn) {
  logConnection();
  conn.addEventListener('change', logConnection);

  // Später wieder abmelden, z. B. beim Verlassen einer Ansicht
  // conn.removeEventListener('change', logConnection);
}
RTT: 50 ms, Downlink: 10 Mbit/s, Typ: 4g

Timeout für fetch an die Latenz anpassen

const fetchWithAdaptiveTimeout = async (url) => {
  const rtt = navigator.connection?.rtt || 200; // Fallback bei fehlender Schätzung
  const timeout = Math.max(3000, rtt * 20);
  const response = await fetch(url, { signal: AbortSignal.timeout(timeout) });
  console.log(`Timeout: ${timeout} ms, Status: ${response.status}`);
  return response.json();
};

fetchWithAdaptiveTimeout('/api/daten.json').catch(console.error);
Timeout: 3000 ms, Status: 200

// Wichtig · Fallstricke

  • Browser-Unterstützung: Nur in Chromium-basierten Browsern (Chrome, Edge, Opera, Samsung Internet) verfügbar. Firefox und Safari kennen navigator.connection nicht. Prüfen Sie deshalb immer zuerst, ob die API vorhanden ist, etwa mit navigator.connection?.rtt. Die Spezifikation ist ein experimenteller Entwurf der WICG und kein Standard.
  • Nur eine Schätzung: Der Wert ist gerundet und beruht auf vergangenen Messungen. Er kann der tatsächlichen Latenz hinterherhinken und eignet sich nicht für exakte Messungen. Für genaue Zeiten nutzen Sie die PerformanceResourceTiming-API.
  • Datenschutz: Die Rundung auf 25 ms und eine Obergrenze (in Chrome etwa 3000 ms) sollen Fingerprinting erschweren. Manche Browser oder Datenschutz-Einstellungen liefern 0 oder feste Werte. Behandeln Sie 0 deshalb als „unbekannt“ und nicht als „keine Latenz“.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird ohne Fehlermeldung ignoriert.
  • Nur in sicheren Kontexten (HTTPS) und auch in Web Workern verfügbar.