Webdesign, WordPress Programmierung, Online und Social Media Marketing - Webworker Blog
Ein einfaches PHP Script, welches den Cache für einzelne Teile der Website, wie z.B. WordPress Datenbank Abfragen, ermöglicht, und zudem manuell an diversen Stellen einzupflegen ist, stellt die Lösung zur Performance Verbesserung dar. Bei der Optimierung der Performance haben auch Datenbankabfragen einen Einfluss auf die Ladezeit. Und wer kein Cache Plugin nutzen will oder kann, der möchte vielleicht auf eine manuell einzupflegende Lösung, ein individuelles PHP Cache Script zurückgreifen. Dieses Cache Script habe ich bereits in 2009 erstellt und es läuft auch heute noch auf einigen meiner Projekte.
Als ich dieses Script damals zusammen bastelte ging es mir um erster Linie und die Performance Verbesserung der WordPress Datenbankabfragen, die so einige Plugins und auch manuelle Lösungen in meinen Blogs verursachen. Damals konnte ich die Datenbank Abfragen von ca. 200 auf unter 50 pro Seitenaufruf verringern. Dass dies eine Performance Verbesserung mit sich bringt liegt auf der Hand.
An dieser Stelle möchte ich mich recht herzlich bei Markus Tacker bedanken, der mir 2 ausführliche englische Tutorials raussuchte, die mir erklärten, wie ich eine PHP Cache Lösung für mich implementieren könnte.
Nun aber zum PHP Cache Script, das aus zwei Teilen besteht. Der erste Teil muss vor dem zu cachenden Teil eingefügt werden, der zweite Teil danach. Wenn Du dieses PHP Cache Script ebenfalls für Deinen WordPress Blog implementieren möchtest, benötigst Du einen beschreibbaren Ordner (chmod 777) auf Deinem Server, den Du am besten direkt im Hauptverzeichnis Deines Blogs anlegst (dort wo auch die Ordner wp-admin etc. sind).
Danach öffnest Du die entsprechende Datei Deines Themes (z.B. sidebar.php) und gibst direkt vor dem zu cachenden Teil (z.B. dem Plugin Aufruf Popular Posts <?php popular_posts(); ?>) folgenden PHP Script Code ein:
<?php $cachefile = "ordner/dateiname.html";
$cachetime = 1440 * 60; // 24 Stunden
if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile))) {
include($cachefile);
$test = date('j. F Y H:i', (filemtime($cachefile) + $cachetime));
echo "<!-- Cache vom ".date('j. F Y H:i', filemtime($cachefile))." - naechster Update: $test-->";
} else {
ob_start(); ?>
In der ersten Zeile definierst Du Deine Datei, in die der Cache geschrieben werden soll. In der zweiten Zeile die Zeit, wie lange der Cache gelten soll. Danach folgt eine Abfrage, die nachsieht, ob die Cache Datei bereits existiert und noch aktuell zu verwenden ist. Falls ja, wird die Cache Datei eingefügt.
Die nächsten beiden Zeilen ($test und echo) habe ich nur zum Test eingefügt. Falls die Cache Datei eingefügt wird, wird im Quellcode eine Zeile ausgegeben, die angibt, von wann der Cache ist und wann der nächste Cache generiert wird. Sobald meine Tests erfolgreich abgeschlossen sind, deaktiviere ich diese beiden Zeilen (dazu einfach // davor einfügen).
Die nächsten Zeilen im PHP Cache Script sind zum Beenden des Einfügens der Cache Datei und definieren, dass, falls keine Cache Datei gefunden wurde oder die Cache Zeit abgelaufen ist, eine PHP Funktion aufgerufen wird, die alles Folgende in einen Puffer zwischenspeichert.
Danach kommt Dein zu cachender Teil. Nach diesem fügst Du den zweiten Teil des PHP Cache Scripts ein:
<?php $fp = fopen($cachefile, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
ob_end_flush();
} ?>
Hier wird Deine im ersten Teil definierte Cache Datei erstellt bzw. geöffnet und der zwischengespeicherte Puffer, also Dein zu cachender Teil, hineingeschrieben und im Anschluss daran wird das PHP Cache Script beendet.
Das wars dann auch schon, mehr ist nicht nötig, um WordPress Datenbankabfragen oder einen beliebigen Teil einer Website mit einem PHP Script zu cachen. Dieses PHP Cache Script kannst Du beliebig oft in Deinen Dateien einsetzen, solltest aber dabei darauf achten, dass Du jedesmal eine andere Cache Datei wählst und ggf. auch die Variablen $cachefile und $cachetime anders benennst (damit es nicht zu Überschneidungen kommt).
Weiter habe ich das PHP Cache Script oft auch für die similar posts in der single.php eingesetzt. Hier gibt es aber noch ein bißchen was zusätzlich zu beachten, da die similar posts ja für jeden Beitrag unterschiedlich sind und somit auch unterschiedliche Cache Dateien geschrieben werden müssen. Dafür habe ich in meinem Cache Ordner einen beschreibbaren Unterordner angelegt und die erste Zeile aus dem ersten Teil des PHP Cache Script ($cachefile…) mit folgenden 2 Zeilen ersetzt:
$teil = basename($_SERVER['REQUEST_URI']);
$cachefile = "ordner/unterordner/".$teil;
In der ersten Zeile wird der Dateiname des einzelnen Beitrages abgefragt und in der zweiten Zeile zu meinem Ordner und Unterordner hinzugefügt.
Da $_SERVER['REQUEST_URI'] nicht auf allen Servern die gleiche Ausgabe produziert, solltest Du die Ausgabe erst einmal überprüfen, bevor Du sie verwendest. Dazu einfach kurz irgendwo in Deinem Theme die folgenden zwei Code-Zeilen einfügen, einen Beitrag öffnen und im Quelltext die Ausgabe überprüfen:
<?php $jetzt = basename($_SERVER['REQUEST_URI']);
echo "<!-- $jetzt -->"; ?>
Mit <?php echo "<pre> ".print_r( $_SERVER, true )." </pre> "; ?> kannst Du Dir auf dem Bildschirm Deine speziellen Variablen ausgeben lassen und dann ggf. REQUEST_URI mit der bei Dir passenden ersetzen.
Ein einzelnes Cache Script wie dieses trägt zwar auch schon ganz gut zur Peformance Verbesserung bei, aber es lässt sich nicht mit einem Cache Plugin vergleichen. Wer aber dennoch ein solches nicht nutzen möchte bzw. kann, dem mag mit einem PHP Cache Script wie diesem durchaus geholfen sein. Abgesehen davon gibt es ja nicht nur WordPress und andere Systeme haben vielleicht keine so einfachen Lösungen wie die WordPress Plugins.
Performance: Page Speed Optimierung – Leverage browser caching - Um nochmal ein bißchen an der Performance Schraube zu drehen, habe ich es mir vor einiger Zeit mal angetan und mir Page Speed gezogen und daraufhin ein bisschen meine Seiten [...]
HTML, PHP und CSS Kommentare, bzw. einzelne Codes deaktivieren - In HTML, PHP wie auch in CSS gibt es die Möglichkeit Kommentare einzufügen, die auf der Webseite selbst nicht zu sehen sind. Solche Kommentare ermöglichen dem Betreiber bzw. Webdesigner seine [...]
Bei all-inkl.com Datenbanken via PHP Skript und Cronjob sichern - All-inkl.com bietet auf seinen Seiten ein PHP Script an, mit dem die WordPress Datenbank sowie natürlich auch alle anderen Datenbanken ganz einfach gesichert werden können. Um das Ganze zu automatisieren [...]
Einträge in die wp-config.php um WordPress etwas schneller zu machen - Wie ja bereits vor Kurzem erwähnt, gibt es ein paar Konstanten, die man in die wp-config.php eintragen kann, um WordPress etwas schneller zu machen. Ein kleiner Aufwand, der für etwas [...]
Random Posts – zufällig ausgewählte Artikel ohne Plugin anzeigen - Eine Version für die Verbesserung der internen Verlinkung ist die Anzeige von zufällig ausgewählten Artikeln – random posts – in der Sidebar des Blogs. Um die random posts anzeigen zu [...]