Serverseitige Komprimierung

Tja, wer es noch nicht weiß, Seiten lassen sich auf dem Server mit gzip komprimieren, und der Browser entpackt diese dann automatisch. Soweit zumindest die Theorie, die Praxis läuft da leider etwas anders ab. Ich bin auf dieses Thema durch einen interessanten Blog-Beitrag auf phpperformance.de gekommen.

Leider wird das Ganze auf den Servern in der Regel mit so einer Art „Fire and Forget“-Mentalität betrieben, denn irgendwie hat man den Eindruck, dass man nicht so ganz weiß, was man da tut. Insofern ist auch der gute Blog-Beitrag wichtig, denn es reicht nicht, mal eben das automatische Encoding einzuschalten. Das Ganze muss auch konfiguriert werden! Ich brauche zum Beispiel keine jpeg’s zu komprimieren – das sind die schon!

Mit mod_gzip habe ich mir regelmäßig erhebliche Probleme eingefangen, sei es mit einem Internet Explorer der das mit dem Decodieren nicht so Ernst genommen hat, oder Proxies, die dem Ganzen auch nicht zuträglich waren. Außerdem gibt es das Ganze nur für Apache 1 – ist also nicht mehr so ganz State of the Art.

Mod_Deflate läuft dafür in der Regel sauber, aber auch da habe ich Ausnahmen gefunden. Vor allem dann, wenn Flash Content nachlädt, der mit PHP erzeugt wird. Hier habe ich mir angewöhnt, im Header stets die Content-Length mitzusenden, dann lief es meistens sauber.

Aber die Tücke steckt oft im Detail: Wenn man das Komprimieren von Bild-Daten global ausschaltet, für PHP global einschaltet, hat man ein Problem! Dies fällt allerdings erst auf dem zweiten Blick auf. Zum Beispiel könnte es ein PHP-Skript geben, das automatisch Thumbnails erzeugt. Für den Server ist und bleibt es ein PHP-Skript, das Content-Encoding wird ggf. eingeschaltet. Dies wäre in diesem Fall genauso unnütz wie kontra-produktiv, da die Bilddaten ja schon komprimiert sind. In dem Fall komprimiere ich doppelt.

Man muss also genau aufpassen, wo man Content-Encoding wie einsetzt. Es global und ohne Rücksicht auf Verluste einzusetzen, ist meist die verkehrte Lösung. Stattdessen sollte man PHP generell NICHT in die automatische Komprimierung aufnehmen, und selektiv das Output Buffering verwenden.

Ähnliche Beiträge

PHP Fehlermeldungen in der Console PHP ist eine feine Sache, und "früher" konnter man sogar ordentlich was mit den Fehlermeldungen anfangen. Da gab es noch "einfaches" HTML, heutzutage ...
PHP Code Snippets für komplexere Aufgaben Wieso das Rad neu erfinden? Große Teile einer Umsetzung bedeuten Copy&Paste - wer was anderes behauptet - naja - macht sich entweder zu viel Arbei...
Besseres Debugging in PHP Debugging in PHP ist das größte Arschloch von allen nicht schön. Wohl dem, der einigen Aufwand betrieben hat, um XDebug an den Start zu kriegen. Aber ...
Die Wunderwelt von PHP und cURL PHP kann eine Menge, und eine Menge sogar doppelt bis dreifach. Das öffnen entfernter Dateien kann mittels "normalem" Dateihandling auch über die soge...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.