Archiviert Apache die gezippte Version einer statischen Datei?

8

Wenn Sie Apache so konfigurieren, dass die gzip-Komprimierung für Ihr statisches HTML / CSS / JS / etc aktiviert wird. Dateien, es gibt automatisch eine gezippte Version an jeden Client aus, der einen entsprechenden Accept-Encoding -Anforderungsheader sendet. (Und für andere Clients wird nur die unkomprimierte Rohdatei gesendet.)

Meine Frage ist: Repachiert Apache die Rohdatei jedes Mal, wenn sie von einem gzip-akzeptierenden Client angefordert wird? Oder wird die gezippte Kopie zwischengespeichert und nur dann erneut komprimiert, wenn sich herausstellt, dass sich die zuletzt geänderte Zeit in der Datei geändert hat?

Und wenn es eine gezippte Kopie Ihrer Dateien zwischenspeichert, wo ist dieser Cache gespeichert?

    
callum 17.06.2011, 13:36
quelle

3 Antworten

4

Nein, die gezippte Datei wird nicht zwischengespeichert.

Allerdings sind die Kosten für die Komprimierung der Datei geringer als die Kosten für das Extrahieren der zusätzlichen Pakete über das Netzwerk. Daher werden Sie auch ohne Zwischenspeicherung auf Ihrem Server eine geringere Gesamt-CPU-Auslastung (und geringere Speicherauslastung und weniger Kontextwechsel) sehen. und eine schnellere Antwort beim Client.

Beachten Sie, dass die komprimierte Datei NICHT im Ordner temp gespeichert ist - mod_deflate liest die Eingabe in einen Puffer fester Größe im Speicher - und wenn der Puffer voll ist (oder der Stream endet), wird der Inhalt komprimiert und an den Webserver zurückgegeben.

Es wird noch weniger CPU verbrauchen (obwohl sich die Geschwindigkeit nicht merklich verbessern wird), wenn der Inhalt vorkomprimiert oder serverseitig zwischengespeichert wird - es gibt mehrere Möglichkeiten, dies zu tun - mod_rewrite kann auf das Vorhandensein von filename.gz testen und es aufspielen anstelle von Dateiname oder Sie können einen Reverse-Proxy verwenden (vorausgesetzt, der Inhalt wird auch mit Caching-Anweisungen geliefert).

    
symcbean 27.09.2013 22:44
quelle
2

Nein, tut es nicht. Dies ist in der Dokumentation zu mod_deflate beschrieben:

  

Da mod_deflate den Inhalt jedes Mal neu komprimiert, wenn eine Anfrage gestellt wird, kann ein Leistungsvorteil dadurch erzielt werden, dass der Inhalt vorkomprimiert wird und mod_deflate angewiesen wird, sie zu bedienen, ohne sie erneut zu komprimieren.

    
cweiske 10.08.2015 06:39
quelle
0

Apache speichert keine zwischengespeicherten Dateien. Es behält nur die Dateien, die Sie sagen, um es zu behalten. So funktioniert die Komprimierung:

  1. Browser fordert Seite an und gibt an, dass sie die Komprimierung akzeptiert
  2. Der Server findet die Seite und liest die Kopfzeile der Anfrage.
  3. Der Server sendet die Seite an den Browser (komprimiert, wenn angegeben, dass er die Header-Anfrage akzeptiert - die komprimierte Datei wird im Ordner "memory / temp" gespeichert)
  4. Browser empfängt die Informationen und zeigt sie an (nach der Dekomprimierung, falls komprimiert). Der Browser speichert dann die Seite und die Bilder.
  5. Server entfernt jeden Hinweis auf die komprimierte Datei aus dem Speicher / temporären Ordner, um Speicherplatz für die nächste Anfrage freizumachen. Es protokolliert die Transaktion access_log.

Der Browser, wenn er die gleiche Datei oder Seite erneut anfordert. Es sendet eine Anfrage an den Server, dass die Komprimierung akzeptiert wird, und die aktuellen Dateien und das Änderungsdatum. Von hier würde der Server antworten, dass sie identisch sind und keine zusätzlichen Informationen senden oder nur die geänderten Dateien basierend auf dem Änderungsdatum senden.

    
James Williams 01.08.2012 01:13
quelle