PHP 8 – Neuer Performance Turbo durch JIT-Compiler?

Am 26. November 2020 erscheint, laut Zeitplan, die neue PHP 8 Version. Es gibt wieder ein paar sprachlichen Erweiterungen sowie einige neue Funktionen, wo von mich aber keine super überzeugt hat (bis auf str_contains und str_starts_with / str_ends_with, welche das Arbeiten mit Strings erleichtern wird). Die großere Änderung die ich sehe ist der neue Just In Time (JIT) Compiler.

 

JIT Compiler?

PHP hat begonnen als Interpretersprache: Bei dem Aufruf eures PHP-Scripts, wird der PHP-Code gelesen und Zeile für Zeile vom Interpreter ausgeführt. Dies hat den großen Vorteil, dass man einzelne PHP-Dateien austauschen kann, ohne große notwendige Eingriffe in den Server. Ebenso können so PHP-Dateien problemlos auf einer Vielzahl an Betriebssystemen und Computer-Architekturen ausgeführt werden. Es ist egal ob euer Webserver auf Windows, Linux oder Mac OS läuft, die PHP-Scripte laufen ohne Probleme.

Ein großer Nachteil von Skript-Sprachen ist die vergleichsweise schlechte Performance. Bei jedem Aufruf muss euer Script und alle weiteren eingebundenen Dateien gelesen und interpretiert werden. Dies hat PHP den Ruf eingebracht, vergleichsweise langsam zu sein.

Mit PHP 7 wurde OPCache standardmäßig aktiviert, was zu einer deutlichen Performance-Steigerung gegenüber PHP 5 geführt hat. Mittlerweile laden viele WordPress-Press-Seiten unterhalb von 0,1 Sekunden. Bei OPCache wird der PHP-Code in so genannte OPCode übersetzt, einem Zwischenformat das recht nah an der Maschinensprache ist. Ebenfalls wird der übersetzte OPCode im RAM des Servers hinterlegt. Bei einem weiteren Aufruf des Scripts kann der OPCode dann aus dem RAM gelesen werden und direkt ausgeführt werden. Das zeitaufwendige Lesen der Dateien von der Festplatte und das übersetzen des PHP-Codes in Maschinencode entfällt weitestgehend.

Dies hat zu einer deutlichen Performance-Steigerung in PHP 7 geführt. Der Bottleneck bleibt aber noch das ausführen der OP Codes: Dies geschieht in der PHP-eigenen virtuellen Maschine, die die OPCodes dann in tatsächlichen Maschinen-Code für das jeweilige Betriebssystem und CPU übersetzt.

In PHP 8 wird dieser Schritt entfallen: Der Code wird direkt in Maschinen-Code übersetzt und kann unmittelbar von der CPU ausgeführt werden. Dies bedeutet, dass mit PHP Geschwindigkeiten ähnlich wie mit C / C++ erreicht werden können.

Der Performance-Unterschied zwischen PHP 7 (links) und PHP 8 (rechts) wird eindrucksvoll in diesem Video dargestellt, indem PHP genutzt wird Fraktale zu berechnen:

 

Relevant für die Praxis?

Währen der Performance-Unterschied in dem Video eindrucksvoll ist, stellt sich die Frage, wie relevant ist dies für die Praxis?

Bei einem WordPress-Blog wird man vermutlich wenig Unterschied merken, da hier der Engpass die MySQL-Abfragen, die Verbindungslatenz zum Nutzer und die Komplexität eures HTML-, CSS-, und JavaScript-Code ist. Ebenfalls merkt man nicht, ob das PHP-Script zu eurer WordPress-Seite nun in 0,1 oder in 0,09 Sekunden ausgeführt wurde.

Relevant wird das neue Konzept bei Lastintensiven Anwendungen, z.B. wenn ihr ein Casino Spiel kostenlos betreibt, eine beliebte API hostet, auf die vielleicht Millionen von Anwendern gleichzeitig per App zugreifen wollen, oder ihr andere, mathematisch rechenintensive Anwendungen betreibt, z.B. aus dem Bereich Künstliche Intelligenz / Machine Learning. Gerade beim letzten sehe ich viel Potenzial: Moderne KI-Anwendungen, z.B. zum Erkennen von Spam, sind sehr rechenintensiv und PHP war dafür bisher zu leistungsschwach. Daher musste man diese Komponenten oft auslagern und dann per Schnittstelle ansprechen. Mit PHP8 wird es kein Problem mehr sein, dies direkt in PHP auszuführen, schließlich sind Laufzeiten vergleichbar zu C-Programmen möglich. Vielleicht ergeben sich auch ganz neue Anwendungsgebiete für PHP, z.B. in der Spieleentwicklung.

Schlussendlich wird ein weiterer Vorteil sein, dass PHP-interne Funktionen für optimale Performance nicht mehr in C / C++ entwickelt werden müssen, sondern direkt in PHP geschrieben werden können. Somit dürfen wir in der Zukunft auf viele neue, nützliche Funktionen gespannt sein.

Autor:
Zurück zur Übersicht aller Beiträge