Signatur
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. beitype === "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
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');
}
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());
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;
}
// Wichtig · Fallstricke
- Experimentell und kaum verbreitet:
downlinkMaxgibt 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 oftundefined. Firefox und Safari kennennavigator.connectiongar 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
downlinkoder misst selbst. - Sonderwerte: Achte auf
Infinity. Vergleiche wiemax > 10sind 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).