Serverkomprimierung mit apache2 und mod_deflate

2010-03-13 - kostaki 9 Kommentare »

Alle modernen Browser unterstützen mittlerweile die Übertragung von Inhalten in komprimierter Form. Der hierfür eingesetzte gzip Algorithmus ist schnell und auf jeder Plattform verfügbar. Webserver wie der Apache2 bieten Module (mod_deflate) die das dynamische komprimieren von Dateien zulassen und aktuelle Server kommen mit der sehr geringen extra Last gut klar. Die komprimierte Übertragung von Inhalten spart nicht nur Bandbreite und Traffic, sondern verringert auch die Ladezeit für den Besucher und verbessert damit das Surferlebnis. Außerdem werden durch die kürze Verbindungszeit des Besuchers zum Server Resourcen schneller wieder freigegeben. Das Argument das nicht alle Browser Komprimierung unterstützen braucht einen auch nicht zu stören, da vor der Auslieferung "verhandelt" wird ob die Inhalte gzip komprimiert übertragen werden oder nicht. Hat der Besucher es abgeschaltet oder sein Browser unterstützt es nicht, dann bekommt eben dieser User unkomprimierte Inhalte, aber das sollte nur selten der Fall sein.

Da Suchmaschinen sehr viele Webseiten besuchen, sind auch diese daran interessiert so wenig wie möglich zu übertragen, aber auch hier gilt das gleiche wie bei den Browsern. Wenn sie es nicht unterstützen, dann wird es auch nicht angewandt. mod_deflate ist für apache2 bzw. apache2.2 das was mod_gzip für apache 1.3 ist. Das einbinden und aktivieren von mod_deflate ist beim Apache sehr einfach und Debian bringt das Paket natürlich schon mit. Meistens ist es sogar schon aktiviert und geladen, es wird nur noch nicht benutzt.

$ a2enmod deflate
Enabling module deflate.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Das war es schon. Nach einem Neustart des apache stehen die Funktionen von mod_deflate zur Verfügung. Jetzt kann man für den gesamten Server oder nur in speziellen Vhosts mod_deflate einsetzen. Bei der Anwendung gibt es die Whitelist die nur definierte Dateien komprimiert ausliefert und die Blacklist, die alle Dateien bis auf bestimmte komprimiert. Meiner Ansicht nach ist die Whitelistlösung die bessere, da man mehr Kontrolle behält. Das Komprimieren von Bildern oder anderen schon von Hause aus komprimierten Formaten lohnt sich nicht, da sie wenn überhaupt nur wenige Byte kleiner werden oder im schlimmsten Fall sogar größer werden.

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/plain text/html text/xml
    AddOutputFilterByType DEFLATE text/css text/javascript
    AddOutputFilterByType DEFLATE application/xml application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript application/x-javascript
</IfModule>

Mit diesen wenigen Zeilen werden alle HTML, Text, CSS, Javascript und XML Dateien komprimiert übertragen. Das reicht eigentlich auch schon um zu starten. Weitere Optionen gibt es im Apache Manual zu mod-deflate. Interessant ist vielleicht noch die Option DeflateCompressionLevel mit der man das Kompressionslevel angeben kann. Der Wert muss zwischen 1 und 9 liegen, wobei 1 wenig komprimiert (sehr schnell) und 9 gut komprimiert (etwas langsamer) ist. Der Standard ist 6.

Hier nun ein Beispiel:

Vor der Aktivierung von mod_deflate

Vor dem aktivieren von mod_deflate war die Startseite über 137KB groß. Wie man sehen kann gibt es keine Bilder aber sehr viele Textfiles (css/js). Diese lassen sich sehr gut komprimieren. Hier der Screenshot nach dem aktivieren von mod_deflate.

Nach dem aktivieren von mod_deflate

Jetzt müssen nur noch 56KB übertragen werden. Außerdem sieht man schön das die Javascripte und CSS Dateien durchweg kleiner geworden sind. Das erhöhen des DeflateCompressionLevel auf 9 bringt im übrigen gerade einmal 0,06KB und kann damit getrost weggelassen werden. Schaut man sich nun noch mal die Firebug Console an, kann man das aushandeln der Komprimierung erkennen.

Firebug und mod_deflate

Es gibt auch die Möglichkeit Dateien schon vor komprimiert abzulegen um das dynamische erstellen zu umgehen. Dies wird hier erklärt, aber ist wie schon erwähnt nicht nötig bei modernen Webservern. Eigentlich wollte ich noch die CPU Kurve meines Webservers zeigen, aber das war vor dem aktivieren eine bodennahe Linie und da ist sie auch noch nach dem aktivieren von mod_deflate.

  1. 9 Kommentare

  2. maXus
    schrieb am 13.04.2010 um 10:55 Uhr

    Um die Komprimierung noch weiter zu treiben, hier mal mein Beispiel für die htaccess:

    <IfModule mod_deflate.c>
         <FilesMatch ".*\.(html|php|css|js|xml)$">
           SetOutputFilter DEFLATE
         </FilesMatch>
         AddOutputFilterByType DEFLATE application/rss+xml
         AddOutputFilterByType DEFLATE application/xml application/xhtml+xml
         AddOutputFilterByType DEFLATE application/javascript application/x-javascript
    </IfModule>
    
  3. timchen
    schrieb am 18.03.2011 um 23:10 Uhr

    Hey, guter Artikel. 🙂
    Wo ist der genaue Vorteil bei der von dir erwähnten Konfiguration im Kommentar gegenüber der anderen?

    Noch was: Könnte Komprimierung von bmp-files Sinn machen?

    greez

  4. kostaki
    schrieb am 19.03.2011 um 10:47 Uhr

    Hey,

    also bmp’s würde ich nie auf einen Webserver packen. Wenn überhaupt nur als Download und dann würde ich sie vorher schon packen. Gleiches gilt für Tiff’s.

    Also ich nehme die im Artikel beschriebenen Regeln oder die die normal schon in der Config stehen wenn man den Server installiert. Bei einer normalen Webseite ist eigentlich nur wichtig das Javascript, CSS und HTML komprimiert übertragen wird. Andere Dateitypen gibt es meistens eh nicht und sind dann von der Anwendung abhängig.

  5. alex
    schrieb am 28.06.2012 um 14:03 Uhr

    guter Artikel
    werde es gleich ausprobieren
    alexander-fehler.de

  6. Quiltecke - Patchworkstoffe und mehr
    schrieb am 08.12.2013 um 09:18 Uhr

    Habe den Tipp auf meiner Seite ausprobiert. Hat spürbar viel gebracht. Vielen Dank!

  1. Trackback(s)

  2. Mrz 26, 2010:Website oder Blog mit der mod_deflate Komprimierung beschleunigen « Kau-Boys blog
  3. Jul 9, 2011:Checkliste: Sauberes und performantes Frontend | Blog-Artikel auf mileon.net
  4. Apr 24, 2012:Page Speed Optimierung » mySHA.de
  5. Jul 3, 2012:PageSpeed: So machst du deine Website schneller

Kommentar schreiben

*

*