Antworten auf Ihre häufigsten Fragen

Was ist der PHP ByteCode Cache?
pdf print

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:

Webseite zu APCu

Seit PHP 5.5 ist der Bytecode-Cache OpCache enthalten, die bisher genutzte Extension APC wird dann nicht mehr benötigt. Doch wenn Sie APC nicht nur wegen seiner Bytecode-Cache-Fähigkeit genutzt haben sondern auch wegen der User-Cache-Funktionen, dann können Sie jetzt die abgespeckte Erweiterung APCu nutzen, in der alle Bytecode-Funktionen entfernt wurden.

APCu kann per KIS Supportanfrage aktiviert werden

 

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. OPcache ist standardmäßig aktiviert.

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
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.


Support & Sales

Support Team

Telefon: 0800 4678 387 Mobile: 02203 9934 1040 E-Mail: support@hosteurope.de


Sales Team

Telefon/Mobile: 0800 404 5056 E-Mail: vertrieb@hosteurope.de