Start · Sprachen · JavaScript · Referenz · NetworkInformation.downlinkMax

NetworkInformation.downlinkMax

Eigenschaft

Schreibgeschützte Eigenschaft, die die theoretisch höchste Downlink-Geschwindigkeit der aktuellen Verbindungstechnologie in Megabit pro Sekunde (Mbps) liefert.

seit JavaScript Experimentell: nur Chromium-basierte Browser (v. a Kategorie: webapi

Signatur

NetworkInformation.downlinkMax

Beschreibung

downlinkMax gehört zur Network Information API. Du erreichst die Eigenschaft über navigator.connection.downlinkMax. Sie gibt eine Gleitkommazahl zurück, die für die Technologie der ersten Netzwerkstrecke (erster Hop) steht, also etwa WLAN 802.11ac, LTE oder Ethernet. Du misst damit nicht die tatsächlich verfügbare Bandbreite. Der Wert ist die theoretische Obergrenze, die die Spezifikation für diese Technologie festlegt.

Der Wert ist also eine grobe Obergrenze. Für Entscheidungen im Alltag, etwa Bildqualität oder Vorladen, passt die Eigenschaft downlink meist besser. Sie liefert eine geschätzte effektive Bandbreite. Auch effectiveType eignet sich dafür. Mit downlinkMax kannst du Verbindungen grob einordnen, z. B. „Mobilfunk der 2G-Klasse“ gegenüber „Glasfaser über Ethernet“. Oder du schließt Fälle aus, in denen hohe Qualität technisch gar nicht möglich ist.

Diese Sonderwerte gibt es:

  • 0: Es besteht keine Netzwerkverbindung (type === "none").
  • Infinity: Die Obergrenze ist unbekannt (z. B. bei type === "unknown" oder "other").

Ändert sich der Wert, etwa beim Wechsel von WLAN zu Mobilfunk, löst das NetworkInformation-Objekt das Ereignis change aus. Du reagierst darauf mit addEventListener("change", …) oder über die Eigenschaft onchange.

Rückgabewert

Typ
number
Beschreibung
Maximale Downlink-Geschwindigkeit in Mbps als Gleitkommazahl. 0 heißt: keine Verbindung. Infinity heißt: unbekannt.

Beispiele

Wert auslesen mit Feature-Erkennung

const connection = navigator.connection;

if (connection && 'downlinkMax' in connection) {
  const max = connection.downlinkMax;
  if (max === Infinity) {
    console.log('Obergrenze unbekannt');
  } else if (max === 0) {
    console.log('Keine Netzwerkverbindung');
  } else {
    console.log(`Max. Downlink: ${max} Mbps (Typ: ${connection.type})`);
  }
} else {
  console.log('downlinkMax wird nicht unterstützt');
}
Max. Downlink: 1300 Mbps (Typ: wifi)

Videoqualität anhand der Technologie-Obergrenze wählen

const chooseVideoSource = () => {
  const conn = navigator.connection;
  // Ohne Unterstützung: sichere Standardqualität
  if (!conn || typeof conn.downlinkMax !== 'number') return 'video-720p.mp4';

  // Obergrenze UND geschätzte Bandbreite berücksichtigen
  const limit = Math.min(conn.downlinkMax, conn.downlink ?? Infinity);

  if (limit < 1) return 'video-240p.mp4';
  if (limit < 5) return 'video-480p.mp4';
  if (limit < 25) return 'video-720p.mp4';
  return 'video-1080p.mp4';
};

document.querySelector('video').src = chooseVideoSource();
console.log(chooseVideoSource());
video-1080p.mp4

Auf Verbindungswechsel reagieren (addEventListener und onchange)

const conn = navigator.connection;

const logChange = () => {
  console.log(`Neuer Typ: ${conn.type}, downlinkMax: ${conn.downlinkMax} Mbps`);
};

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

  // Später wieder entfernen, z. B. beim Verlassen der Ansicht
  setTimeout(() => conn.removeEventListener('change', logChange), 60_000);

  // Alternative über die on-Property:
  // conn.onchange = logChange;
}
Neuer Typ: cellular, downlinkMax: 21 Mbps

// Wichtig · Fallstricke

  • Experimentell und kaum verbreitet: downlinkMax gibt es nur in Chromium-Browsern, und dort nicht überall. Verlässlich funktioniert die Eigenschaft vor allem unter ChromeOS und Android. Auf Desktop-Chrome unter Windows, macOS und Linux ist sie oft undefined. Firefox und Safari kennen navigator.connection gar nicht. Prüfe deshalb immer vorher, ob die Eigenschaft vorhanden ist, und plane einen Ersatzwert ein.
  • Keine Messung: Der Wert stammt aus einer festen Tabelle in der Spezifikation und hängt nur von der Technologie des ersten Hops ab. Ein WLAN-Router mit 1300 Mbps kann an einem 16-Mbit-DSL-Anschluss hängen. Für die tatsächlich verfügbare Bandbreite nimmst du downlink oder misst selbst.
  • Sonderwerte: Achte auf Infinity. Vergleiche wie max > 10 sind dann wahr, obwohl nichts bekannt ist.
  • Datenschutz: Die Network Information API kann zum Fingerprinting beitragen. Browser dürfen die Werte deshalb vergröbern oder ganz weglassen.
  • Die Eigenschaft ist auch in Web Workern verfügbar (self.navigator.connection).