Ich habe die Ladezeit einer Website optimiert. Eine Möglichkeit bestand darin, mehrere HTTP-Anforderungen für CSS in einer kombinierten HTTP-Anforderung zu kombinieren. Einer der Gutachter stellte jedoch eine interessante Frage: Würde das parallele Herunterladen mehrerer CSS-Dateien die Ladezeiten der Seite nicht verringern?
Ich habe diese Option nie in Betracht gezogen, da das Einzige, was ich im Internet gelesen habe, darin besteht, dass das Verringern der Anzahl (blockierender) HTTP-Anforderungen der Schlüssel zu einer schnelleren Webseite ist (obwohl Google Pagespeed Insights diese 1 nicht eindeutig anzugeben scheint ).
Ich sehe ein paar Gründe, warum Parallellisierung die Leistung nicht oder nur sehr wenig verbessert (aufgewogen durch den Vorteil, weniger HTTP-Anforderungen zu verwenden):
- Das Einrichten einer neuen Verbindung ist teuer. Während das Einrichten mehrerer Verbindungen parallel erfolgen kann, verwenden Browser (je nach Browser) höchstens 4 bis 6 Verbindungen. Wenn Sie also CSS parallel herunterladen, wird das Herunterladen anderer Elemente wie JavaScript und Bilder blockiert.
- Das Einrichten einer HTTPS-Verbindung erfordert einige zusätzliche Daten. Ich habe gelesen, dass dies leicht ein paar KB Daten sein können. Dies sind einige zusätzliche Daten, die über das Internet gesendet werden müssen, anstatt das CSS, das wir tatsächlich senden möchten.
- Aufgrund des TCP Slow Start-Algorithmus ist die Verbindung umso schneller, je mehr Daten über eine Verbindung gesendet wurden. Langlebigere Verbindungen senden die Daten also tatsächlich viel schneller als neue Verbindungen. Siehe zum Beispiel das SPDY-Protokoll, das eine einzelne Verbindung verwendet, um die Ladezeiten für Seiten zu verbessern.
- TCP ist eine Abstraktion: Es gibt (normalerweise) immer noch nur eine zugrunde liegende Verbindung. Während also mehrere Anforderungen verwendet werden, profitieren die über das Kabel gesendeten Daten möglicherweise nicht unbedingt von mehreren Verbindungen, um die Geschwindigkeit zu verbessern.
- Internetverbindungen sind von Natur aus unzuverlässig, insbesondere auf Mobilgeräten. Eine Anforderung wird möglicherweise erheblich schneller als die andere ausgeführt. Wenn Sie mehrere Anforderungen für CSS verwenden, wird das Rendern der Webseite blockiert, bis die letzte Anforderung abgeschlossen ist. Dies kann erheblich später sein als die durchschnittliche Verbindung.
Gibt es also überhaupt einen Vorteil bei der Parallelisierung von HTTP-Anforderungen für CSS-Dateien?
Hinweis / Update: Alle CSS-Dateien sind renderblockierend. CSS-Dateien, die noch nicht aus dem kritischen Pfad verschoben wurden.