Expires wird als HTTP Header mitgesendet. Wir wollen allerdings die Seite beschleunigen und legen fest, was wie lange gecachet werden soll. Dadurch wird bei einem zweiten Seitenaufruf der ganze Quark nicht noch einmal geladen.
Wir prüfen erst ob unser Apache dieses Modul aktiviert hat, sonst heult der herum und steigt mit einem Fehler aus. Das heißt <IfModule>.
Folgende Konfiguration kann in der .htaccess im Root-Verzeichnis festgelegt werden.
<IfModule mod_expires.c> ExpiresActive on ExpiresDefault "access plus 5 days" # CSS ExpiresByType text/css "access plus 1 weeks" # HTML ExpiresByType text/html "access plus 0 seconds" # JavaScript ExpiresByType application/javascript "access plus 1 weeks" </IfModule>
ExpiresActive muss natürlich angeschaltet werden, sonst läuft hier nix.
Danach könnt ihr einen Standard-Zeitraum festlegen. Welche Werte dort eingeben werden können, steht in der mod_expires Dokumentation.
Jetzt können wir je nach Mimetype das Caching festlegen.
Ich halte die Zeiten eher gering, weil ich hier auch öfters mal etwas ändere und dann wäre es doof, wenn das der Leser erst nach einem Monat sieht.
Wer eine Orientierung braucht, der kann bei HTML5 Boilerplate abgucken. Die haben allerdings viel längere Zeiten drin. Einfach die Dokumentation dort öffnen und mit STRG+F nach mod_expires suchen. ;)
Ich habe Vieles auf 1 Tag oder 1 Woche reduziert.
Wir haben jetzt also Caching.
Dann wäre es schön, wenn wir die Ausgaben noch Komprimieren könnten. Dazu gibt es Gzip und Deflate Komprimierung. Wenn eurer Browser einen HTTP Request zu einem Server schickt, dann sagt er, welche Komprimierung er versteht.
Das steht in deinem HTTP-Request:
Accept-Encoding: "gzip, deflate"
Jetzt schicken wir die Antwort mit Deflate zurück. Dazu folgendes in die .htaccess:
# compress text, html, javascript, css, xml: <IfModule mod_filter.c> AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript </IfModule>
Was mit mod_filter alles geht steht in der Apache Dokumentation.
Caching beim Besucher ist okay, aber geht das auch auf dem Server, damit er die Seiten schneller liefert? Das geht auch mit mod_cache. Ob diese Einstellungen eure Seite beschleunigt haben, könnt ihr mit Google PageSpeed prüfen.
Nachdem ich meine Einstellungen optimiert hatte, wanderte der rote Punkt bei Leverage browser caching zu grün. Yeah, yeah, yeah. Jetzt nur noch den Scheiß mit dem Blocking Javascript killen.