rss
twitter
  •  

Webseiten beschleunigen Teil 4 – Die gzip-Compression

| Veröffentlicht in Optimierung | |

5

gzip-CompressionWenn man seine Website mit Pagespeed überprüft und dabei die Meldung “Enable Compression” (Komprimierung anschalten) erhält, dann ist das ein Hinweis darauf, dass die Daten unkomprimiert vom Server zum User gelangen. Gerade bei größeren Webseiten kann man durch eine gzip-Compression aber einiges an Datenmenge (ca. 70-80 %) und damit auch an Übertragungszeit einsparen.

Generell gibt es 3 Möglichkeiten, wie man die gzip-Compression nutzen kann. Die einfachste ist ein simpler Eintrag in der .htaccess:

1. gzip-Compression über die .htaccess

<IfModule mod_deflate.c>
<FilesMatch "\\.(js|css|html|xml)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>

In der ersten Zeile wird geprüft, ob das Modul mod_deflate auf dem Server aktiviert ist. Das ist nämlich Voraussetzung zur Nutzung der gzip-Compression. Danach werden dann alle Dateien mit der Endung .js, .css, .html, .xml komprimiert. Es können natürlich noch weitere Endungen hinzugefügt werden. Allerdings macht eine Kompression von Grafikformaten wie z. B. jpg, gif oder png wenig Sinn, da diese bereits von Haus aus komprimiert sind. Ein Nachteil dieser Methode ist, dass das Modul mod_deflate nicht bei allen Hostern installiert ist. In diesem Fall bietet sich Methode 2 an.

2. gzip-Compression mit PHP

Bei dieser Methode wird einfach bei jeder Seite, die man komprimieren möchte, in der ersten Zeile folgender Code eingefügt:

<?php
ob_start("ob_gzhandler");
?>

Diese Methode hat 2 Nachteile. Zum einen funktioniert sie nur mit php-Dateien. Die Datei muss also die Endung .php haben (dies kann man zwar auch umgehen, aber darauf will ich jetzt nicht näher eingehen). Außerdem muss der Code in jede Datei, die man komprimieren möchte, extra eingefügt werden. Wenn man viele Dateien hat, ist das natürlich eine Menge Arbeit. Deswegen sollte man zuerst die 1. Möglichkeit (gzip-Compression über die .htaccess) ausprobieren und nur wenn diese nicht funktioniert, die gzip-Compression über php erledigen.

3. Dateien vorkomprimieren

Die beiden ersten Methoden haben das Problem, dass sich dadurch die Serverlast etwas erhöht. Das ist eigentlich nicht weiter tragisch, da die eingesparte Datenmenge diesen Nachteil mehr als nur wettmacht. In einigen Fällen ist es aber trotzdem sinnvoll, die Kompression vorab von Hand zu erledigen. Dies bietet sich vor allem bei Dateien an, die einerseits sehr groß sind und andererseits nur selten geändert werden.

Wem bei dieser Beschreibung spontan Javascript-Bibliotheken wie z. B. jQuery einfallen, der liegt damit vollkommen richtig. In der aktuellen Version 1.4.2 hat jquery.js eine Größe von ca. 80 kb. Durch eine manuelle Kompression lässt sich die Dateigröße auf ca. 25 kb verringern. Nachdem man die Datei mit einem Packer wie z. B. 7zip verkleinert hat, kopiert man sie einfach in das gleiche Verzeichnis wie die Originaldatei. Um Kompatibilitätsprobleme mit dem Safari-Browser zu vermeiden, sollte man die Endung der komprimierten Datei von .gz auf .jgz ändern. Danach fügt man noch folgenden Code, den ich auf tutorialajax.com gefunden haben, in die .htaccess ein:

RewriteEngine on
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.jgz -f
RewriteRule (.*)\.js$ $1\.js.jgz [L]
AddType "text/javascript" .js.jgz
AddEncoding gzip .jgz

Mit diesem Code wird die gepackte Version der Datei anstelle der Originaldatei ausgeliefert.

Nutzung der gzip-Compression mit WordPress

WordPress-User können die oben beschriebenen Methoden ebenfalls problemlos einsetzen. Aber wie so oft bei WordPress, gibt es für diesen Zweck natürlich auch ein Plugin, das einem auch bei der gzip-Compression das Leben erleichtern. Dabei handelt es sich um das Plugin wpCompressor des bekannten WordPress-Entwicklers Sergej Müller. Das Plugin setzt für die Komprimierung die oben beschriebene Methode 2 (gzip-Compression mit PHP) ein, die allerdings nicht so schnell ist wie die 1. Methode. Deshalb sollten auch WordPress-User lieber die gzip-Compression über die .htaccess nutzen und nur, wenn der Hoster dies nicht ermöglicht, zum Plugin greifen.

Test der gzip-Compression

Zum Testen, ob die gzip-Compression auch tatsächlich funktioniert, kann man dieses PHP-Skript verwenden. Einfach den Namen der Website eintippen und auf “Check” klicken. Dann kriegt man angezeigt, ob die angegebene Website komprimiert ist und welche Datenmenge eingespart wurde.

Fazit: Die Komprimierung von Webseiten macht auf alle Fälle Sinn und ist mit wenig Aufwand verbunden. Die einfachste und schnellste Methode ist die gzip-Compression über die .htaccess, die man durch eine Vorkomprimierung einzelner Dateien noch ergänzen kann. Falls dies vom Hoster nicht unterstützt wird, sollte man die Daten per PHP-Aufruf komprimieren.

Artikelreihe Webseiten beschleunigen:

Teil 1: Dateigröße von Grafiken verkleinern

Teil 2: Expires-Header verwenden

Teil 3: Parallele Downloads

Kommentare (5)

[...] Webseiten beschleunigen (Teil 4): Die gzip-Kompression. [...]

Hi, habe mich vor einiger Zeit auch mit dem Thema beschäftigt und kann nur dazu raten folgende Komponenten zu installieren:

- nginx als Webserver
http://suckup.de/blog/2010/07/26/webserver-beschleunigen/

- php-fpm 5.3.x + xcache
http://suckup.de/blog/2010/07/26/apc-eaccelerator-xcache/

Mit freundlichem Gruß,
Lars Moelleken

Ein sehr guter Artikel! Nur vermisse ich eins:

Gerade bei großen und stark frequentierten Seiten sollte man nach Möglichkeit auf dein Einsatz einer .htaccess-Datei verzichten und statt dessen die entsprechenden Anweisungen in die Config des virtuellen Hosts legen.

Dieser Ansatz hat aber auch Nachteile:
Eine .htaccess ist schneller editiert und an die Webserver-Config kommt nicht jeder Webmaster ran.

Hm, also ich würde den Artikel nicht so pauschal unterschreiben wollen.
Sicher, wenn man einen Server hat, der schlecht angebunden ist oder einen User, der ebenfalls an einer ISDN (oder schlechteren Leitung) sitzt, ist ein ZIPen des Inhalts richtig.
ABER: Moderne Browser fangen schon an, weitere Daten (Bilder, CSS-Files, etc.) zu laden, bevor die ursprüngliche Page fertig geladen wurde.
Durch ein zippen einerWebsite jedoch muss diese erst als ganzes geladen, entpackt und interpretiert werden, bevor weitere Files nachgeladen werden können.
Mit Firebug und dessen Page Speed Analyse kann man dies ziemlich genau nachvollziehen.

Aus diesem Grund habe ich bei meinen Server das zippen abgeschaltet, bzw. nur für Files vorgesehen die größer als 1MB sind oder keine HTML-Files sind.

@voku1987 + @Heiko

Der Artikel und die ganze Artikelreihe ist hauptsächlich für Webspace-Nutzer gedacht. Wenn man einen eigenen Server mit Root-Zugriff hat, hat man natürlich noch mehr Möglichkeiten, seine Webseiten zu beschleunigen.

@Wolfgang

Wie ich in der Artikelreihe ja mehrfach erwähnt habe, setze ich ja auch Pagespeed ein, um herauszufinden, wie ich meine Webseiten beschleunigen kann. Wie man damit einen Geschwindigkeitsverlust durch das Zippen erkennen kann, weiß ich aber nicht. Vielleicht kannst du das nochmal näher erklären.

Wenn man nur normalen Webspace hat, ist es aber zum Teil auch gar nicht möglich, die gzip-Kompression für html-Dateien auszuschalten. Mein Webhoster hat für HTML-Dateien die gzip-Kompression automatisch aktiviert. Da kann ich in die .htaccess reinschreiben, was ich will.

Schreibe einen Kommentar

Artikel: Webseiten beschleunigen Teil 4 – Die gzip-Compression
blogoscoop