Webinhalte lassen sich transparent für den Client komprimieren. Dadurch baut sich die Seite beim Betrachter schneller auf und der Server wird entlastet, weil der Prozess schneller beendet wird.
Als Vorlage für dieses Tutorial nehmen wir die Webseite der deutschen Wikipedia. Die Seite ist schon hoch optimiert, dennoch können wir das Beispiel nutzen um noch besser zu sein.
Link: http://demo.easy-coding.de/performance/original
Wir nutzen die eigene, sehr schlanke Bibliothek HeaderUtil. Der Quellcode der Datei ist ausreichend dokumentiert.
In allen dynamischen Skripte mit PHP fügen wir das Script wie folgt an den Beginn der Datei ein.
Diff
1
2
3
4
5
6
7
8
9
--- original/index.php 2009-10-2921:10:09.000000000+0100+++ gzip/index.php 2009-10-2921:15:01.000000000+0100@@ -1,4+1,7 @@-<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<?php+require_once 'HeaderUtil.php';+HeaderUtil::startOutput();+?><!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" xml:lang="de" xmlns="http://www.w3.org/1999/xhtml" lang="de"><head>
Wir sehen, dass die Index Datei von 37 KB auf 10 KB schrumpft.
Statische Inhalte lassen sich ähnlich einfach manipulieren. Wir geben sie nicht direkt an den Browser, sondern lassen die Auslieferung über ein PHP Script steuern.
Dass die Dateien dabei den selben Dateinamen behalten, lässt sich über mod rewrite realisieren.
Wir erzeugen folgende .htaccess Datei:
wcf.bbcode.htaccess.title
1
2
RewriteEngine On
RewriteRule (^.+\.(js|css))$ gzip.php?file=$1&mime=$2 [L]
Die gzip.php sieht wie folgt aus. In der Variable $dirs = array('wiki_files') habe ich alle erlaubten Ordner gepackt.
Damit wird verhindert, dass ungewollt geschützte Dateien wie z.B. eine config.php ausgeliefert werden.