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

Tutorial Amazon Web Services mit PHP – V ... Wie im letzten Teil bereits angekündigt, erstellen wir im letzten Teil des Tutorials ein komplett funktionsfähiges Beispiel, um ein Buch mittels ISBN ...
Happy birthday phphatesme.com Tja, was soll ich sagen, mein Lieblings-PHP-Blog wird 1 Jahr alt. Schon recht erstaunlich, wie schnell man sich an den Blog gewöhnt hat :) Vielleicht ...
Sicherheitsanalysen für PHP in PhpStorm Früher war ja alles besser, auch das Programmieren, sogar die Sicherheit für PHP. Früher reichte es, wenn etwas funktionierte. Diese Zeiten sind aller...
Tutorial Amazon Web Services mit PHP – IV &#... Nachdem wir uns im letzten Teil des Tutorials mit dem Funktionscaching beschäftigt haben, besitzen wir nun alle notwendigen Werkzeuge, um Daten aus de...

Schreibe einen Kommentar