FAQ
Server Managed und WebServer
PHP ByteCode Cache

INFO
  • Liebe(r) FAQ-Nutzer(in),

    wir überarbeiten aktuell das KIS, sodass die Screenshots in den FAQ-Artikeln vorübergehend nicht mit der tatsächlichen Ansicht übereinstimmen.
    Dies betrifft größtenteils das Design, nicht aber den Inhalt oder die Funktionen des KIS. Bei Fragen steht Ihnen unser Support gerne zur Verfügung!

    Ihr Host Europe Support-Team

Druckansicht
 
 PHP ByteCode Cache  
 

Bytecode Caches sind kleine nützliche Extensions für PHP, die einen enormen Geschwindigkeitsvorteil bringen können, wenn man sie richtig einsetzt. Es werden die Fragen behandelt, wofür der Cache gedacht ist, wie er arbeitet und wie er auf unserer WebPack-Plattform verwendet werden kann.

Was/wofür sind Bytecode Caches?

|Der Fluch der Interpretersprachen
Interpretersprachen (PHP, Perl, Python, Ruby und andere, übrlicherweise als "Scriptsprachen" bekannte Programmiersprachen) sind Sprachen, bei denen der Quellcode eines Programmes ansich zur Ausführung kommt. Dies unterscheidet sie von Compilersprachen, bei denen das Programm, das zur Ausführung kommt, schon in eine Maschinenlesbare Form übersetzt wurde. Im Endeffekt arbeiten beide Sprachen mit Maschinenlesbaren Befehlen, bei Interpretersprachen jedoch muss der Quellcode bei jeder Ausführung auf's neue in Maschinensprache übersetzt werden - Compilersprachen hingegen tun dies nur einmal und bringen den immer selben Maschinencode direkt zur Ausführung.

PHP-Webseiten sind so betrachtet also nichts anderes als Programme, deren Quellcode vorliegt. Der Prozess der Übersetzung von PHP Code dauert in vielen Fällen, insbesondere bei dynamischen Webseiten mit sehr viel Code, wenig Aktivität und wenig Output meist länger als die eigentliche Programmlaufzeit. Noch dazu werden Webseiten mehrmals gleichzeitig und oft hintereinander ausgeführt - jedes mal wird der Code der Webseite neu eingelesen, interpretiert, übersetzt und ausgeführt. Und das, wo sich der Quellcode der Seite zwischen den Ausführungen selten ändert. Caching Proxies können zwar das Ergebnis eines PHP-Scriptes, also die fertig gerenderte Seite, cachen, aber wie sinnvoll ist das mit dynamischen Webseiten?

|Der Bytecode
PHP liest beim Ausführen eines PHP-Scriptes den Quellcode ein, löst Includes und Abhängigkeiten zu anderen Scripten auf und hat am Ende dieses Vorgangens eine große Menge PHP-Code. Dieser wird von einem Parser auf Richtigkeit geprüft und von einem Bytecode Compiler dann in eine Zwischenform übersetzt, die die Ausführung des Codes ermöglicht. Diese Zwischenform wird auch Bytecode genannt. Die Übersetzung des Klartext-Quellcodes in den Bytecode nimmt oftmals in der Ausführungskette die längste Zeit in Anspruch, da in dieser Phase das Format des Codes für die Verarbeitung in einer Maschine nicht optimal, sondern auf die Bearbeitung durch Menschen optimiert ist. Aus diesem Grund müssen viele Überprüfungen und Analysen auf dem Code durchgeführt werden, bevor er in eine maschinenlesbare Form gebracht werden kann. Diese Zeit wird jedes mal beansprucht, wenn ein PHP Script ausgeführt wird, da der Bytecode nicht gespeichert wird. Scriptsprachen wie Python arbeiten um dieses Problem herum, indem sie zumindest Module und Komponenten in ihrer Bytecode-form cachen - PHP allerdings besitzt von Hause aus so eine Funktion nicht und muss daher mehr arbeiten. Wäre es nicht schön, sich diese Zeit sparen zu können? Ja... natürlich. Wichtig hierbei ist, dass es sich bei dem Bytecode um eine übersetze Form des PHP-Scriptes handelt und nicht um den ausgegebenen HTML-Code. Der Bytecode kann also weiterhin ohne Verluste der Dynamik einer Webseite ausgeführt werden.

|Der Cache
Für PHP gibt es mehrere Projekte, die es sich zur Aufgabe gemacht haben, einen Bytecode-Cacher zu entwickeln, welcher die Performance von Scripten durch Zwischenspeicherung des Bytecodes gerade bei komplexen Webseiten drastisch verbessern soll. Diese Projekte sind allesamt binärmodule für PHP (sogenannte PECL Extensions) und können daher nicht durch Sie selbst installiert werden. Da wir unsere Hosting-Angebote natürlich jederzeit in Performance und Bedienbarkeit erweitern möchten, haben wir uns entschieden, eine Auswahl an Bytecode-Caches für Sie bereitzustellen.

Der Cache ist eine Struktur aus Festplattenspeicher und Arbeitsspeicher, in der Bytecode von PHP-Seiten je nach Größe, Häufigkeit der Verwendung, Dynamik und Häufigkeit der Änderungen des Quellcodes einsortiert und abgefragt wird. Wichtig zu beachten ist wieder, dass nicht etwa der erzeugte HTML-Output einer Seite gecached wird, sondern der Bytecode, der weiterhin ausgeführt werden kann. Man bemerkt also beim Betrachten einer Webseite im besten Fall lediglich einen pfeilschnellen Seitenaufbau und nicht etwa alten gecachten Content. Neben dem Bytecode speichert der Cache auch Verfallsdaten und das Datum der letzten Änderung eines PHP-Scriptes. Ändert sich also ein PHP-Script, so wird es neu interpretiert und der Cache aktualisiert. Veraltete Webseiten gibt es so also nicht. Zwar dauert der Seitenaufbau ein einziges Mal wieder etwas länger, aber oft ändert sich der PHP Code ja in den meisten Fällen nicht.

|Probleme
Bytecode Cacher setzen an einer sehr grundlegenden Stelle im Verarbeitungsprozess eines PHP-Scriptes an. Daher kann es beim Einsatz von Bytecode Caches zu Problemen mit Webseiten kommen, die auf den ersten Blick nicht mit diesen Caches in Verbindung zu stehen scheinen. Gelegentliche weiße Seiten gehören hier zu den häufigsten Symptomen. Gerade die Software APC hat sich in der Vergangenheit als die am wenigsten kompatible Software gezeigt und sollte nur in Absprache eingesetzt werden. Insgesamt gilt, dass Bytecode Caches zwar toll klingen, aber kein Allheilmittel für Performance-Probleme sind. Erst recht ist ihre Optimierung und Einstellung ein langfristiger Prozess, der sich nicht verallgemeinern lässt und sehr von Ihrer Applikation abhängt (Größe des Caches, Lebensdauer, Prüf-Intervalle, eventuelle Optimierungsstufen und mehr). Falls Sie nicht über einen fortgeschrittenen Sachverstand und Kenntnis über Ihre Applikation und deren Fähigkeiten, Eigenheiten und Abhängigkeiten verfügen, werden Sie kaum bis nicht von einem Bytecode Cache profitieren.

Welche Bytecode Caches gibt es?

|APC / Alternative PHP Cache

eAccelerator Homepage

Bisher liegen zum eAccelerator keine Erkenntnisse vor.

|XCache

XCache Homepage

Dokumentation der Einstellungen

Bisher liegen zum XCache keine Erkenntnisse vor. Er liefert dennoch mit vielen CMSen hervorragende Ergebnisse und arbeitet mit dem Zend Optimizer offensichtlich gut zusammen.

|OPcache

php.net OPcache Site

Generell können Sie alle OPCache-Einstellungen verändern, die auf der folgenden Seite mit "PHP_INI_ALL" markiert sind:

Informationen zur Konfiguration auf php.net

|weitere ...

Weitere Bytecode Cacher existieren, kommen auf unserer Plattform allerdings nicht zur Anwendung. Ein Beispiel ist der Turck MMCache for PHP, auf dem der eAccelerator aufbaut.

|Wie kann ich einen Cache aktivieren?

Um die Aktivierung eines Cache zu beantragen, reichen Sie bitte eine Support-Anfrage im KIS ein.


Wie und was ist wo verfügbar?

|Verfügbarkeit

Cache Modul WebHosting
WebPack
WebServer
WebServer Dedicated
Virtual Server Managed
Dedicated Server Managed
WebPack Pro
funktioniert mit
Zend Optimizer?
funktioniert mit
ionCube?
Status Verfügbar in PHP-Version Anmerkungen
APC nein ja nein unbekannt stable PHP 5.3
PHP 5.4
eAccelerator nein ja lt. Hersteller: ja unbekannt beta PHP 5.3
Dieser Cache wird nicht mehr aktiv weiterentwickelt.
XCache nein ja erfahrungsgem. ja unbekannt stable PHP 5.3
PHP 5.4
Dieser Cache wird nicht mehr aktiv weiterentwickelt.
OPcache nein ja nein unbekannt stable PHP 5.5
PHP 5.6
Kann lediglich Bytecode-Caching durchführen und ist auf den entsprechenden Produkten standardmäßig aktiv.
APCu (ObjectCache) nein ja nein unbekannt stable PHP 5.5
PHP 5.6
Kann lediglich das Object-Caching übernehmen.

|Anmerkungen zu Zend / ionCube

Der Zend Optimizer und der ionCube Loader sind Decoder für die Ausführung von kodiertem und geschütztem PHP-Code. Diese Decoder arbeiten schlecht bis gar nicht mit Bytecode Caches zusammen. Einige Bytecode Caches erfordern (siehe Tabelle) die Abschaltung des Zend Optimizers oder des ionCube Loaders.





Wie hilfreich ist dieser Informationstext für Sie? Sie haben, wenn Sie im KIS eingeloggt sind, die Möglichkeit Kritik oder Verbesserungsvorschläge zu diesem Artikel abzugeben. Zur Bewertung



 
 Suche in

Suche nach bekanntem FAQ-Artikel.
Artikelnummer (ID):