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

Was bringt Smarty 3.0 ? Ich gebe zu, ein wenig Kaffeesatzleserei ist es schon, zumal es zumindest offiziell nur eine Machbarkeitsanalyse von Smarty 3 gibt, aber interessant i...
Tutorial Amazon Web Services mit PHP – II &#... Im vorherigen Teil haben wir zumindest schon einmal einen API-Key und eine Partner-ID besorgt, jetzt geht es ans Eingemachte. AWS sind ein Service, de...
Test-Driven Development mit PHP Mit phpUnit gibt es bereits seit Jahren eine Methode zur testgetriebenen Entwicklung in PHP. Gerade bei der agilen Software-Entwicklung ist diese Meth...
Smarty 3.0 Beta 1 veröffentlicht Ich gebe zu das Smarty ein persönlicher Liebling von mir ist. Zum einen kann ich damit erreichen das mein PHP-Code keinen „Optimierungen“ von Designer...

Schreibe einen Kommentar