Viele Webseiten werden heut zu Tage unter Verwendung der Programmiersprache PHP geschrieben und verwaltet. Doch die Interpretersprache bringt gewisse Probleme mit sich, was die Performance angeht. Jedes Laden oder Neuladen einer PHP-Webseite verlangt die Interpretierung des Quellcodes auf dem Server und die Übermittlung der Ergebnisse an den Client, also den Benutzerrechner. Dies kann, besonders bei dynamischen Webseiten zu längeren Ladezeiten führen. Eine Abhilfe für dieses Problem versprechen die PHP-Byte-Code-Caches. Dieser Artikel skizziert die grundlegende Problematik, erklärt warum die Bytecode-Caches eine komfortable Lösung darstellen und wie diese auch beim beliebten Content-Management-Framework TYPO3 angewendet werden können:
Das Problem
PHP gehört zu den Programmiersprachen, deren Quelltext bei Ausführung interpretiert werden. Eine andere Form von Programmiersprachen wären die Compiler-Sprachen, deren Quelltext nach Abschluss des Projektes einmal für den Prozessor interpretiert wird, wonach die Ergebnisse dann in einer ausführbaren Datei gespeichert werden. Eine solche Datei wird aus dem PHP-Code nicht generiert. Das heißt er muss bei jeder Ausführung neu für die Maschine übersetzt werden, damit der Prozessor verstehen kann, was er tun soll. Solche Interpretersprachen sind bei Entwicklern eigentlich recht beliebt, da sie es ermöglichen, sehr dynamisch mit dem Quelltext zu arbeiten und damit die Ausgabe kurzfristig zu manipulieren, ohne nach jeder Änderung eine neue ausführbare Datei zu erstellen. Andererseits gilt dieser Vorteil natürlich nur dann, wenn sich tatsächlich zwischen dem mehrmaligen Laden einer Webseite etwas am Code verändert hat. Ansonsten ist der Prozess mit dem Aufrufen der Website, dem Interpretieren auf dem Server und der Übermittlung und Darstellung der Ergebnisse für den Client nicht effizient.
Der ByteCode
Die zuvor schon erwähnten ‚Ergebnisse‘, die aus der Interpretation des PHP-Quellcodes auf dem Server hervorgehen, nennt man Byte-Code. Dieses ‚Zwischenergebnis‘ stellt also die Informationen dar, die sich aus dem vorliegenden PHP-Code ergeben und dem Besucher angezeigt werden sollen. Schade ist nur, dass dieser relativ aufwendig generierte Byte-Code nach Ausführung verloren geht und nicht wiederverwendet wird. Selbst häufig wiederkehrende und gleichbleibende Informationen werden nicht zwischengespeichert, sondern jedes mal aufs Neue generiert. Dass dies der Performance nicht zu Gute kommen kann, wird schnell klar. Deswegen macht es Sinn, die fehlende Funktion des Zwischenspeicherns nachträglich zu integrieren:
Der Cache
Die Lösung für das Perfomance-Problem ist natürlich das Zwischenspeichern gleichbleibender Ergebnisse, sodass der Vorgang des Interpretierens, welcher beim Laden einer PHP-Seite die meiste Zeit in Anspruch nimmt, nicht öfter erfolgt als nötig. Dieses Verfahren nennt man Caching. Hierbei werden bestimmte Informationen im sogenannten Cache gespeichert und bei Bedarf unter schnellerem Zugriff wieder abgerufen. Bei PHP-Seiten ist es der Byte-Code, der gespeichert wird. Wird die gleiche Seite nun erneut aufgerufen, prüft das entsprechende Modul, ob die Seite bereits interpretiert wurde und wenn ja, ob sie seit der letzten Anzeige verändert wurde. Falls sie gleich geblieben ist, wird einfach der bereits vorhandene Byte-Code verwendet, anstatt einen neuen zu generieren. Dies beschleunigt häufiges Laden von Webseiten mit gleichbleibendem PHP-Code beträchtlich. Wichtig ist hierbei, dass Content, welcher in Form von HTML-Code vorliegt, nicht zwischengespeichert wird, sondern ausschließlich der PHP-Byte-Code. Dies verhindert, dass veraltete Inhalte angezeigt werden. Um dieses Verfahren zu nutzen, muss man lediglich eine PHP-Extension herunterladen und in der PHP.ini aktivieren. Schon sieht man auf der PhpInfo-Seite einen entsprechenden zusätzlichen Abschnitt über die Cache-Erweiterung. Dies funktioniert auch bei TYPO3-basierten Webseiten und Webservern. Wer diese etwa in einer VM unter Ubuntu laufen lässt, kann zum Beispiel die Erweiterung APC mit folgendem Befehl downloaden ’sudo apt-get install php-apc‘.
PHP Byte-Code-Caches sind also mit sehr wenig Aufwand einzusetzen und bringen verhältnismäßig große Performance-Gewinne. Zumal noch längst nicht alle Nutzer über Breitband-Verbindungen verfügen, sollte man bei der Erstellung einer Webseite nicht auf dieses Verfahren verzichten. Die Besucher werden es zu schätzen wissen.
Hinweis: Dies ist ein Gast-Beitrag von Albert Lochmüller! In Zukunft sind Gastbeiträge in der Kategorie „Gastbeitrag*“ zu finden und mit einem „*“ markiert.