Ein Cache ist ein probates Mittel um die Performance einer Applikation zu steigern, dabei werden Caches nicht nur auf Softwareebene eingesetzt, sondern können auch direkt in der Hardware implementiert sein. Der Cache eines Prozessors zum Beispiel hilft, die Anzahl der Hauptspeicherzugriffe zu verringern. In größeren Webanwendungen sind vor allem Datenbankzugriffe ressourcenlastig und ein Kandidat, um einen Cache zu verwenden. In diesem Artikel geht es nun darum einen solchen kleinen Cache in PHP zu erstellen.
save_cache() und load_cache()
Der Cache wird aus nur 2 Funktionen bestehen, natürlich könnte man auch eine komplexere Klasse erstellen, aber dafür gibt es bereits erprobte Lösungen (z.B. Zend Cache). Die Funktion save_cache() ist, wie der Name schon vermuten lässt, für das Speichern zuständig. Bevor wir loslegen können müssen wir uns noch überlegen, wie und was der Cache eigentlich speichern soll. Fertige HTML Seiten oder gar einzelne Objekte ? Um ganze Objekte zu speichern, muss man sich überlegen, wie man ein Objekt so serialisiert, damit man es auf der Festplatte speichern kann und später wieder richtig interpretiert.
Zum Glück hat dieses Problem PHP bereits gelöst, mit den Funktionen serialize() und unserialize() können Objekte als String dargestellt werden.
Die Funktion um den Cache anzulegen sieht dann folgendermaßen aus
function save_cache($data, $key) {
$key = md5($key);
$data = serialize($data);
file_put_contents('ORDNER/cache_data/'.$key, $data);
}
Um auf die gecached’te Datei wiederzugreifen zu können, erhält sie einen eindeutigen Schlüssel.
Mit dieser 3 – zeiligen Funktion ist es bereits möglich, praktisch jedes Objekt serialisiert auf der Festplatte zu speichern.
// Zu cachende Objekt
$array = array('name' => 'm0d', 'Homepage' => 'http://staticfloat.com');
// Cache anlegen
save_cache($array, 'meinArray');
load_cache()
Natürlich nützt der Cache bisher noch nicht viel, da wir noch keine Daten aus ihm laden können. Der Cache soll natürlich auch nicht ewig gültig sein, sondern nur eine bestimmte Zeitspanne.
function load_cache($key, $expire) {
$key = md5($key);
$path = 'cache_data/'.$key;
if(time() < (filemtime($path) + $expire)) {
return unserialize(file_get_contents($path));
}
unlink($path);
return false;
}
Die Funktion erhält 2 Parameter, der erste ist der Schlüssel unter dem der Cache angelegt wurde. Der zweite Parameter $expire, ist ein Wert in Sekunden, der festlegt wie lange die Cachedatei gültig ist. Dabei wird ab dem Zeitpunkt des Erstellens der Datei gerechnet. Ein Wert von $expire = 300 würde nur einen Cache Hit zurückliefern, wenn die Datei weniger als 5 Minuten alt ist.
Beispiel
$data = load_cache(‘meinArray’, 300);
In der Variable $data wäre nun wieder der Array von oben gespeichert.
Achtung
In beiden Funktionen wird keine Überprüfung durchgeführt, ob die entsprechenden Dateien überhaupt existieren!




Hallo,
ich hätte da mal eine kleine Frage,
könntest du vielleicht ein Tutorial darüber machen, wie man Dateien Cachet.
Dies sagt mir Google:
https://developers.google.com/pagespeed/#url=ft14b.bplaced.net&mobile=false&rule=LeverageBrowserCaching
Das alles könnte ich wohl Cachen, doch finde im Internet kein Tutorial wie…
Ein Tutorial von dir wäre der Oberhammer.
Über eine schnelle Antwort würde ich mich sehr freuen und danke dir schon mal im Vorraus :)
hi,
das ist browserseitiges Caching, schau mal hier http://www.askapache.com/htaccess/speed-up-sites-with-htaccess-caching.html
Ist browserseitiges Caching gut oder eher nicht zu Empfehlen??
Wäre aber echt Super wenn du ein kleines Tutorial zu machen könntest
(Bitte)
:) :D :P
sehr zu empfehlen ;)
Geil, kannst du das? Ich checke das auf der anderen Seite irgendwie nicht so ganz, du kannst das viel besser Erklären :) :D
Ich bitte um Entschuldigung falls ich dich Nerve :)
Hallo,
könntest du evtl ein genaueres Tutorial machen? Ich verstehe z.b. gar nicht, wie ich dem Array praktisch alle Inhalte die angezeigt werden, zuweisen kann, da ja die komplette Seite gecached werden soll.
Also diese Zeile praktisch:
$array = array(‘name’ => ‘m0d’, ‘Homepage’ => ‘http://staticfloat.com’);
Gruß,
Florian
Hi,
ich versteh nicht ganz was du meinst, willst du eine komplette (HTML-) Seite cachen? Also nicht nur einzelne Objekte, Arrays wie im Tutorial gezeigt?
Gruß,
Patrick