- Wird die Größe einer Website unter 14 kB gehalten, kann sich die Ladegeschwindigkeit deutlich verbessern im Vergleich zu 15 kB
- Dieses Phänomen entsteht durch den TCP-Slow-Start-Algorithmus; wegen der Begrenzung der ersten Datenübertragung gibt es einen spürbaren Geschwindigkeitsunterschied
- 14 kB entsprechen bei den meisten Servern der Kapazität von 10 TCP-Paketen, die initial gesendet werden
- In Umgebungen mit hoher Latenz wie Satelliteninternet kann ein zusätzlicher Round Trip (RTT) zu einer Verzögerung von mehr als 612 ms führen
- In der Praxis ist es für die Web-Performance wirksam, die wichtigsten Inhalte unter 14 kB zu halten oder kritische Ressourcen innerhalb der ersten 14 kB zu platzieren
Überblick und Grundprinzip
- Dass eine kleinere Website schneller lädt, ist eine bekannte Tatsache
- Weniger offensichtlich ist jedoch, dass beim Sprung von 14 kB auf 15 kB ein gravierender Unterschied bei der Zeit bis zur ersten Antwort entstehen kann
- Zwischen einer 15-kB- und einer 16-kB-Seite ist der Geschwindigkeitsunterschied gering, zwischen 14 kB und 15 kB können jedoch bis zu 612 ms liegen
Was ist TCP?
- Transmission Control Protocol (TCP) arbeitet über IP (Internet Protocol) und ist für die zuverlässige Zustellung von Paketen zuständig
- Ein Webbrowser sendet bei einer HTTP-Anfrage mehrere TCP-Pakete
- Bei reinem IP-Einsatz lässt sich nicht feststellen, ob Pakete angekommen sind, daher stellt TCP die Empfangsbestätigung (ACK) bereit
- Der Server sendet zunächst eine kleine Menge an Paketen und überträgt weitere Pakete, sobald vom Browser ein ACK empfangen wurde
- Bleibt ein ACK aus, wird eine Paket-Neuübertragung ausgelöst
Was ist TCP Slow Start?
- TCP Slow Start ist ein Algorithmus, bei dem der Server die Menge der gesendeten Pakete schrittweise erhöht, um die Qualität der Netzwerkverbindung beziehungsweise die Bandbreite zu ermitteln
- Zu Beginn einer Verbindung sendet der Server nur eine kleine Menge an Paketen, in der Regel 10
- Wenn der Computer des Besuchers ACKs korrekt zurücksendet, wird die Paketmenge verdoppelt
- Fehlen ACKs, werden danach Pakete mit geringerer Geschwindigkeit gesendet
- Der genaue Algorithmus unterscheidet sich je nach Implementierung im Detail, das Grundprinzip bleibt aber gleich
Warum gerade 14 kB?
- Die meisten Server senden im Slow Start 10 TCP-Pakete auf einmal
- Die maximale Größe eines TCP-Pakets beträgt 1500 Byte, nach Abzug des Headers (40 Byte) bleiben 1460 Byte an Nutzdaten übrig
- Daher ist 10 x 1460 = 14600 Byte (etwa 14 kB) die Obergrenze der ersten Übertragung
- Wenn eine Website oder wichtige Ressourcen unter 14 kB bleiben, können sie ohne zusätzliche anfängliche Round-Trip-Verzögerung dargestellt werden; mit Komprimierung entspricht das im Original oft mehreren Dutzend kB
Wie stark kann ein einziger Round Trip verzögern?
Beispiel Satelliteninternet
- Ein typisches Beispiel für eine Umgebung mit hoher Latenz ist Satelliteninternet, etwa für Nutzer auf Ölbohrinseln oder Kreuzfahrtschiffen
- Wenn ein Smartphone eine Startseite anfordert, läuft der Weg über Router → Satellitenschüssel → Satellit im All → Bodenstation → Server; jeder Abschnitt kann mehrere Dutzend bis mehrere Hundert ms dauern
- Der gesamte Übertragungs-Round-Trip umfasst zwei Wege über den Weltraum, Netzwerkstrecken und die Serververarbeitung und verursacht etwa 612 ms zusätzliche Verzögerung
- Bei HTTPS kann sich das durch zusätzliche Handshakes auf 1836 ms erhöhen
Latenz in terrestrischen Netzen
- Auch in mobilen Netzen wie 2G oder 3G treten 100 bis 1000 ms Latenz auf
- Bei Überlastung, Serverengpässen, Paketverlust und in vielen anderen Situationen können zusätzliche Verzögerungen entstehen
Strategien zur Website-Optimierung mit der 14-kB-Regel
- Entscheidend ist, die Website oder Seite so klein wie möglich zu machen
- Ideal ist ein Design, bei dem das komprimierte Übertragungsvolumen jeder Seite unter 14 kB bleibt
- Mit Komprimierung kann der tatsächliche Inhalt dabei bis zu ~50 kB umfassen
- Das lässt sich oft erreichen, indem automatisch abspielende Videos, Pop-ups, Tracker sowie unnötiges JS/CSS und andere überflüssige Elemente reduziert werden
- Falls sich nicht die gesamte Seite in 14 kB unterbringen lässt, ist es wichtig, kritische Ressourcen und Hauptinhalte in den ersten 14 kB zu platzieren, etwa CSS, JS und den wichtigsten Text
- Auch HTTP-Header (nicht komprimierbar) und Bilder zählen zu diesen 14 kB; bei Bildern sollte nur das Nötigste beziehungsweise der sichtbare Bereich geladen oder ein Placeholder verwendet werden
Ausnahmen der 14-kB-Regel und aktuelle Protokollthemen
- Die 14-kB-Regel ist keine übermäßige Vereinfachung, es gibt aber einige Ausnahmen
- Manche Server erweitern das Initial Window auf 30 Pakete
- Über den TLS-Handshake kann unter Umständen ein größeres Window erlaubt werden
- Die pro Route mögliche Paketanzahl kann zwischengespeichert werden, sodass bei späteren Verbindungen mehr gesendet wird
- Auch bei HTTP/2 bleibt die Praxis meist bestehen, dass Server beim TCP Slow Start mit 10 Paketen beginnen
- Auch für HTTP/3 und QUIC wird die 14-kB-Regel offiziell empfohlen
Zusammenfassung und Referenzen
- Technische Hintergründe und zusätzliche Erläuterungen lassen sich über die jeweiligen Links nachlesen
- Erstveröffentlichung: 2022-08-25, zuletzt aktualisiert: 2022-08-26, Autor: Nathaniel, verwandte Tags: Web-Performance, HTTP, TCP
Weiterführende Links
- Zusätzliche Materialien zu Ethernet-Frames und TCP-Header-Strukturen, zu Latenz und Bandbreite sowie zu TCP-/QUIC-Spezifikationen
1 Kommentare
Hacker-News-Kommentare
Softwareentwickler sollten sich etwas mehr für die Mediensicht bzw. Transportschicht interessieren, besonders die Punkte des Autors zu Zuverlässigkeit und Latenz bei 3G/5G waren beeindruckend. Bei Funkverbindungen gibt es fast immer Neuübertragungen, und bei den meisten HTTP-Kommunikationen müssen Pakete in der richtigen Reihenfolge eintreffen, damit die UI aktualisiert werden kann. Tatsächlich wird selbst ein einzelner REST-Request nur dann wirklich als ein Paket behandelt, wenn Request und Response jeweils unter 1400 Byte liegen. Darüber hinaus wird ein „einzelner“ Request in Wahrheit auf mehrere Pakete aufgeteilt. Wenn auch nur eines davon Probleme macht, muss alles in Reihenfolge ankommen, damit der Bildschirm korrekt aktualisiert wird. Wer damit experimentieren möchte, kann in den Chrome-Entwicklertools den 3G-Modus und Paketverlust aktivieren; dann sieht man, dass schon eine kleine Optimierung die Reaktionsfähigkeit der UI stark verbessern kann. Deshalb ist es ein überzeugendes Ziel, APIs und UIs so klein wie möglich zu halten
Meine Homepage hat ein Übertragungsvolumen von 7,0 kB komprimiert
Das 14-kB-Ziel ist etwas ambitioniert, aber auch die Idee, innerhalb des anfänglichen 10-Paket-Fensters zu bleiben, ist interessant. Ein Projekt, das sich wie ich auf Website-Größe konzentriert, ist 512kb.club. Dort werden Seitengrößen wie Golf-Scores verglichen. Meine Seite(anderegg.ca) kam vor der Registrierung auf insgesamt 71 kB über alle Ressourcen. Durch dieses Projekt habe ich auch Cloudflare Radar entdeckt, das nützliche Tools für Site-Analysen und die Messung von Seitengrößen bietet. Der Hauptzweck ist zwar ein Dashboard für das gesamte Internet, aber ein Tool zur Analyse von Seitengrößen ist ebenfalls enthalten
Wer damit etwas spielerischer experimentieren will: Die Größe des Initial Window (IW) lässt sich serverseitig setzen. Man kann sie zum Beispiel so anpassen
Das gilt auch für den folgenden Artikel: Cloudflare-Blog - Russische ISPs lassen nur die ersten 16 KB durch, wodurch die meisten Webzugriffe unbrauchbar werden. Laut der Cloudflare-Analyse drosseln russische ISPs den Internetzugang ihrer Nutzer so, dass pro Web-Asset nur die ersten 16 KB geladen werden
Die Schnittmenge zwischen Menschen, die nicht wissen, was TCP Slow Start ist, und Menschen, denen Ladeverzögerungen von Websites so wichtig sind, dass sie selbst Mikrooptimierungen betreiben, ist sehr klein. Startups sollten sich zuerst auf das Startup selbst konzentrieren, und nur große Unternehmen können es sich leisten, sich an solchen Optimierungen festzubeißen
Meine Homepage ist 17,2 KB groß! (ohne Abhängigkeiten) Ich habe meine persönliche Seite wirklich stark optimiert und sogar 100 Punkte in Lighthouse erreicht. Früher hielt ich das für unmöglich, aber ich habe es geschafft. Zur Einordnung: Sie wurde mit Rails gebaut. Solche Optimierungen lohnen sich tatsächlich. Eine Seite, die blitzschnell erscheint und sich nie träge anfühlt, ist als Erfahrung an sich schon äußerst befriedigend
Ich finde, der Artikel hat zwei logische Schwächen
Die heutige Generation neigt dazu, selbst einfache statische Websites mit Frameworks wie Next.js zu bauen. Es macht mich etwas traurig, dass die Zeit von HTML+CSS+js vorbei zu sein scheint
Nicht nur Latenz, auch die Minimierung des Ressourcenverbrauchs ist eine notwendige Bedingung für eine nachhaltige Zukunft. Der Einfluss von Netzwerken auf die Umwelt ist keineswegs gering. Schade, dass der Ton in den Kommentaren etwas spöttisch wirkt. Diese Optimierung ist zwar nicht die ultimative Lösung für alles, aber der Effekt auf den geringeren Energieverbrauch hätte stärker betont werden können