Cachen ist das Zwischenspeichern von Dateien. Wenn eine Seite mit einem Bild bereits einmal geladen ist, wird das Bild zwischengespeichert. Warum soll der Browser beim erneuten Aufruf der Seite das Bild nochmals laden? Man spricht vom "Browser Cache".

Server nutzt Cache

Auf der anderen Seite steht der Server. Wird die Startseite von Joomla! angefordert, so holt Joomla! alle Informationen für die Startseite aus der Datenbank, presst Sie ins Template und liefert die so zusammengestellt Seite dar. Joomla! könnte die Seite, die gerade zusammengestellt wurde, so wie Sie ist auf der Serverseite in einem Verzeichnis als "statische" Seite ablegen. Beim erneuten Aufruf der Startseite, kann Joomla! dann auf diese Zwischengespeicherte - statische - Seite zurückgreifen und diese Ausliefern.

Das Cachen von Seiten erlaubt es demnach, Datenbankabfragen und das Ausführen verschiedenen PHP Skripte zu vermeiden, da der Server die Seiten als statische Datei ablegt und an den Browser ausliefert.

In Joomla! kann man den Cache im Backend in der Konfiguration einschalten.

Joomla! Cache aktivieren

Doch schauen Sie sich ihre Webseite nach Aktivierung des Caches nochmal an. Manche Erweiterungen laufen ggf. nicht mehr korrekt. Also: Testen, Testen, Testen.

Browsercache nutzen

Mit HTTP 1.1 wurde der "entity tag" (kurz ETag) eingeführt, der eine einfache Zeichenkette in Anführungszeichen ist. Laut Wikipedia besteht der ETag häufig aus der "systemspezifischen Inode, der Größe und dem Zeitpunkt der letzten Änderung der Datei". Alternativ nutzen einige den MD5 Hash der Datei selbst (siehe auch md5_file). Eine gute Abhandlung zum ETag finden Sie unter solariz.de. Folgendes Beispiel von php.net:

Wird das Feld im Header angegeben ...

<?php
  $file="mootools.js.php";
  // Inode
  $ETag = dechex(fileinode($file));
  // Size
  $ETag.= "-".dechex(filesize($file));
  // Modification time in useconds
  $ETag.= "-".dechex(((filemtime($file).str_repeat("0",6)+0) & (8589934591)));
  header("ETag: ".$ETag);
?>

... kann der Client beim nächsten Aufruf die ETag übergeben und damit den Server darauf hinweisen, dass er die Datei schon hat.

Bei der ersten Anfrage der mootools.js.php läuft folgende Kommuninkation:

Erste Anfrage ohne ETag in Antwort ETag enthalten

Die Anfrage (unterer Teil) zeigt die Anforderung vom Firefox. Die ETag ist ihm bisher nicht bekannt. In der Antwort (oberer Teil) übergibt der Server dem Firefox die Datei inkl. der ETag.

Die wiederholte Anfrage sieht dann wie folgt aus:

Weiter Anfrage mit ETag ohne Logik

Der Browser fordert die Datei "mootools.js.php" an (unterer Teil) und übergibt dem Server den ETag in der Zeile "If-None-Match". Der Server prüft und gibt dem Browser die Datei wieder komplett zurück inkl. der bereits bekannten ETag. D. h. wir haben hier zwar eine ETag drin, doch bringen wird es zur Zeit noch nichts.Wir basteln ein wenig weiter.

Greifen wir uns wieder die mootools.js.php und ergänzen folgende Zeilen:

...
  header("ETag: ".$ETag);

  if (trim($_SERVER['HTTP_IF_NONE_MATCH']) == $ETag) {
    header("HTTP/1.1 304 Not Modified");
    exit;
  }

  if( strpos( $_SERVER["HTTP_ACCEPT_ENCODING"],"gzip") !== FALSE){
    ob_start("ob_gzhandler");
  }
...

Ich lade die geänderte mootools.js.php hoch, lade die Seite ein erstes mal und dann noch einmal. Das Ergebnis zeigt die folgende Abbildung:

Weiter Anfrage mit ETag mit Logik

Durch das Skritp wird die ETag geprüft, die der Client sendet. Wenn die ETag noch übereinstimmt, muss die Datei nicht erneut gesendet werden. Die Meldung "304 Not Modified" wird übermittelt. Die Kommunikation wird abgeborhcne (exit()).

Wenn das nun in alle JavaScript und CSS-Dateien integriert wird, kommen wir zukünftig sehr schnell voran.

Weitere Infos zum Thema Cache

Artikel zum Thema Cache

ETag für den Client Cache