Kategorien
Allgemein

Apache, Zopfli – vorkomprimierte Dateien

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 {} \;

 

Von der_metzger

Hi, ich bin Jan Kuehnel - Fachinformatiker für Systemintegration ,Linux-Benutzer und Blogger. Seit 2019 arbeite ich als Systemadministrator bei einem beliebten deutschen Fahrradverleih und zuvor über 10 Jahren bei einem großen deutschen Provider. Ich folge seit meiner Kindheit dem Hobby, technische Rätsel zu lösen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.