Optimieren von Datei-Cache und HTTP2

8

Unsere Website erwägt den Wechsel zu http2.

Mein Verständnis ist Ссылка , da ein Server, der http2 verwendet, nur eine Anfrage sendet.

Stattdessen sehe ich den Hinweis, dass die Dateigrößen kleiner sein sollten , damit sie mit höherer Wahrscheinlichkeit von einem Browser zwischengespeichert werden.

Es hängt wahrscheinlich von der Größe einer Website ab, aber wie klein sollten die Dateien einer Website sein, wenn sie http2 verwenden und sich auf das Caching konzentrieren wollen?

In unserem Fall liegen unsere vielen individuellen js und css Dateien im Bereich von 1kB bis 180kB. Jquery und Bootstrap könnten mehr sein. Kumulativ ist ein neuer Download einer Seite auf unserer Website in der Regel weniger als 900 kb.

Ich habe also zwei Fragen:

Sind diese Dateigrößen klein genug, um von Browsern zwischengespeichert zu werden?

Wenn sie klein genug sind, um zwischengespeichert zu werden, ist es gut, Dateien trotzdem für Benutzer zu verketten, die Browser verwenden, die http2 nicht unterstützen.

Würde es in diesem Fall schaden, größere Dateigrößen zu haben und HTTP2 zu verwenden? Auf diese Weise würden Benutzer, die ein Protokoll ausführen, davon profitieren, da eine Website sowohl für http als auch für http2 optimiert werden könnte.

    
spaghettiCode223 23.02.2016, 21:36
quelle

1 Antwort

7

Lassen Sie uns ein paar Dinge klären:

  

Ich verstehe, dass http2 die Optimierungstechniken wie die Dateiverkettung veraltet macht, da ein Server, der http2 verwendet, nur eine Anfrage sendet.

HTTP / 2 macht Optimierungstechniken wie die Dateiverkettung etwas überflüssig, da HTTP / 2 viele Dateien parallel über dieselbe Verbindung herunterladen kann. Zuvor konnte der Browser in HTTP / 1.1 eine Datei anfordern und musste dann warten, bis diese Datei vollständig heruntergeladen wurde, bevor sie die nächste Datei anfordern konnte. Dies führt zu Workarounds wie der Dateiverkettung (um die Anzahl der benötigten Dateien zu reduzieren) und mehreren Verbindungen (ein Hack, um Downloads parallel zu ermöglichen).

Allerdings gibt es ein Gegenargument, dass es immer noch Overheads mit mehreren Dateien gibt, einschließlich Anfordern, Zwischenspeichern, Lesen aus dem Cache, usw. Es ist in HTTP / 2 zwar stark reduziert, aber nicht komplett verschwunden. Darüber hinaus funktioniert das Zippen von Textdateien besser bei größeren Dateien, als das Zippen von vielen kleineren Dateien. Ich persönlich denke jedoch, dass die Nachteile diese Bedenken überwiegen, und ich denke, die Verkettung wird aussterben, sobald HTTP / 2 allgegenwärtig ist.

  

Stattdessen sehe ich den Hinweis, dass es besser ist, die Dateigrößen kleiner zu halten, damit sie mit größerer Wahrscheinlichkeit von einem Browser zwischengespeichert werden.

     

Es hängt wahrscheinlich von der Größe einer Website ab, aber wie klein sollten die Dateien einer Website sein, wenn sie http2 verwenden und sich auf das Caching konzentrieren wollen?

Die Dateigröße hat keinen Einfluss darauf, ob sie zwischengespeichert wird oder nicht (es sei denn, wir sprechen über wirklich große Dateien, die größer sind als der Cache selbst). Der Grund, Dateien in kleinere Chunks aufzuteilen, ist besser für das Caching. Wenn Sie Änderungen vornehmen, können alle Dateien, die nicht berührt wurden, weiterhin aus dem Cache verwendet werden. Wenn Sie zum Beispiel Ihr gesamtes Javascript in einer großen .js-Datei haben und eine Zeile Code ändern, muss die gesamte Datei erneut heruntergeladen werden - selbst wenn sie bereits im Cache war.

Wenn Sie eine Image-Sprite-Map haben, ist das zwar ideal, um separate Bilddownloads in HTTP / 1.1 zu reduzieren, aber die gesamte Sprite-Datei muss erneut heruntergeladen werden, wenn Sie sie zum Beispiel bearbeiten müssen. Ganz zu schweigen davon, dass die ganze -Datei heruntergeladen wird - sogar für Seiten, die nur einen dieser Bildsprites verwenden.

Aber all das zu sagen, gibt es einen Gedankengang, der besagt, dass der Nutzen des Langzeit-Cachings überschritten ist. Siehe diesen Artikel und insbesondere den Abschnitt über HTTP-Caching, der zu Zeigen Sie, dass der Browser-Cache der meisten Leute kleiner ist als Sie denken und es ist daher unwahrscheinlich, dass Ihre Ressourcen sehr lange zwischengespeichert werden. Das bedeutet nicht, dass Caching nicht wichtig ist - aber mehr, dass es nützlich ist, in dieser Sitzung zu surfen, anstatt langfristig. Daher werden bei jedem Besuch Ihrer Website wahrscheinlich alle Ihre Dateien wieder heruntergeladen - es sei denn, sie sind sehr häufig, haben einen sehr großen Cache oder surfen nicht viel im Web.

  

ist es gut, Dateien trotzdem für Benutzer zu verketten, die Browser verwenden, die http2 nicht unterstützen.

Möglicherweise. Aber abgesehen von Android ist die HTTP / 2-Browser-Unterstützung tatsächlich sehr gut . Wahrscheinlich sind die meisten Ihrer Besucher bereits da HTTP / 2 aktiviert.

Damit gibt es keine Nachteile, wenn man Dateien unter HTTP / 2 verkettet, die nicht schon unter HTTP / 1.1 vorhanden sind. Ok, es könnte argumentiert werden, dass eine Anzahl von kleinen Dateien parallel über HTTP / 2 heruntergeladen werden kann, während eine größere Datei als eine Anfrage heruntergeladen werden muss, aber ich kaufe das nicht, das verlangsamt es sehr. Kein Beweis für dieses, aber Bauchgefühl schlägt vor, dass die Daten noch gesendet werden müssen, so dass Sie ein Bandbreitenproblem haben, oder Sie nicht. Außerdem ist der Aufwand für die Anforderung vieler Ressourcen, obwohl in HTTP / 2 stark reduziert, immer noch vorhanden. Latenz ist immer noch das größte Problem für die meisten Benutzer und Websites - nicht Bandbreite. Wenn Ihre Ressourcen nicht wirklich riesig sind, bezweifle ich, dass Sie den Unterschied zwischen dem Download einer großen Ressource in I've Go oder der Aufteilung der gleichen Daten in 10 kleine Dateien, die parallel in HTTP / 2 heruntergeladen werden, bemerken würden (obwohl Sie dies in HTTP / 1.1 tun würden). . Ganz zu schweigen von den oben besprochenen Problemen mit gzipping.

Meiner Meinung nach ist es also nicht schädlich, sich noch eine Weile zu verketten. Irgendwann müssen Sie den Anruf machen, ob die Nachteile die Vorteile Ihres Benutzerprofils überwiegen.

  

Würde es in diesem Fall schaden, größere Dateigrößen zu haben und HTTP2 zu verwenden? Auf diese Weise würden Benutzer, die ein Protokoll ausführen, davon profitieren, da eine Website sowohl für http als auch für http2 optimiert werden könnte.

Absolut würde überhaupt nicht weh tun.Wie oben erwähnt, gibt es (im Grunde genommen) keine zusätzlichen Nachteile beim Verketten von Dateien unter HTTP / 2, die nicht bereits unter HTTP / 1.1 vorhanden waren. Das ist unter HTTP / 2 nicht mehr nötig und hat Nachteile (reduziert möglicherweise die Verwendung von Caching, erfordert einen Build-Schritt, erschwert das Debugging, da der eingesetzte Code nicht mit dem Quellcode identisch ist usw.).

Verwenden Sie HTTP / 2, und Sie werden immer noch große Vorteile für jede Website sehen - mit Ausnahme der einfachsten Websites, die wahrscheinlich keine Verbesserung, aber auch keine Nachteile sehen werden. Und da ältere Browser bei HTTP / 1.1 bleiben können, gibt es für sie keine Nachteile. Wann oder wenn Sie sich entscheiden, die Implementierung von HTTP / 1.1-Performance-Tweaks wie Verketten zu stoppen, ist eine separate Entscheidung.

Tatsächlich ist der einzige Grund, HTTP / 2 zu verwenden, dass die Implementierungen immer noch ziemlich blutig sind, so dass es Ihnen vielleicht nicht behagen würde, Ihre Produktions-Website noch zu starten.

**** Edit August 2016 ****

Dieser Beitrag von einer bandbreitengebundenen Image-Site hat in letzter Zeit in der HTTP / 2-Community als eines der ersten dokumentierten Beispiele dafür, dass HTTP / 2 tatsächlich langsamer als HTTP / 1.1 war, einiges Interesse geweckt. Dies unterstreicht die Tatsache, dass die HTTP / 2-Technologie und das Verständnis noch immer neu sind und einige Seiten für einige Seiten optimiert werden müssen. So etwas wie ein kostenloses Mittagessen scheint es nicht zu geben! Es lohnt sich, es zu lesen, obwohl dies ein extremes Beispiel ist und die meisten Websites durch Leistungsprobleme, Latenzprobleme und Verbindungseinschränkungen unter HTTP / 1.1 stärker beeinträchtigt werden als durch Bandbreitenprobleme.

    
Barry Pollard 27.03.2016, 22:08
quelle