Internetseiten können, wenn die Dateien komprimiert sind, da weniger Daten übertragen werden müssen, deutlich schneller aufgebaut werden.
Kompression der Daten mit Googlels Zopfli
Google hat im April 2013 auf github veröffentlicht. Die Zopfli deflate Implementierung kann deutlich besser komprimieren als das Standard GNU Gzip Program.
Google Zopfli ist zu finden unter: https://github.com/google/zopfli
Nach dem der Google Anleitung folgend Zopfli kompilliert und Installiert ist kann mit der folgenden Shellzeile eine Datei komprimiert werden.:
zopfli --i1000 dateiname.css
Um alle, in diesem Beispiel „CSS Dateien“ zu komprimieren kann mit einer Schleife nach allen Dateien Dateien die auf .css enden gesucht werden und diese an Zopfli übergeben werden.
for f in *.css.css ; do zopfli -i1100 -c $$f > `basename $$f .css`.gz ; done
Auslieferung der mit Zopfli Komprimierten Dateien mit dem Apache Webserver
Bei nutzung eines Apache-Webservers ist ein möglicher Trick, das mit mod_rewrite jedem Browser der gzip unterstützung bietet andere Dateien ausliefert werden können als den Browsern die keine gzip Unterstützung anbieten. Das schöne dabei ist das solange keine entsprechende Datei vorhanden ist, der Browser die Ursprungsdatei erhält.
Eine Beispiel .htaccess Datei:
RewriteEngine On RewriteCond %{HTTP:Accept-encoding} gzip RewriteCond %{REQUEST_FILENAME} \.css$ RewriteCond %{REQUEST_FILENAME}.gz -f RewriteRule ^(.*)$ $1.gz
In der ersten Zeile wird mod_rewrite aktiviert, in der Zweiten Zeile wird gefiltert, das die filgenden Regeln ausschließlich befolgt werden wenn der Request Header die Antwort als gzip komprimierten Datenstrom akzeptiert. In der dritten Zeile werden nur Dateien akzeptiert die auf .css enden.
Die vierte Zeile sucht im Dateisystem ob eine Datei gleichen Namens mit der Dateierweiterung .gz existiert.
Die fünfte Zeile liefert anstelle der .css Datei die .css.gz Datei aus.
Die Rechenzeit die der Apache Webserver dafür benötigt ist zum glück minimal.
Ergänzung durch einen „Automatismus“
Ich persönlich nutze gerne einen make Makefile um nach Änderungen schnell alle Dateien wieder zu komprimieren.
all: clean build chown build: find ./css/ -type f -name "[^.]*.css" -execdir yui-compressor -o {}.css {} \; cd ./css/ && for f in *.css.css ; do zopfli -i1100 -c $$f > `basename $$f .css`.gz ; done clean: find ./css/ -name "*.css.css" -delete find ./css/ -name "*.css.gz" -delete chown: find ./css/ -type f -name "[^.]*.css" -execdir chown www-data:www-data {} \; find ./css/ -type f -name "[^.]*.gz" -execdir chown www-data:www-data {} \;