Zur Beschleunigung der Ausführung von PHP-Anwendungen haben Mitarbeiter der Firma Zend Experimente mit JIT-Techniken und LLVM gemacht.
Das brachte aber nicht viel, so dass das Team sich auf größere Umbauten an den internen Datentypen verlegte – und daraus resultierten nun Leistungssteigerungen zwischen 10 und 30 Prozent, wie Dmitry Stogov schreibt.
Die Entwickler hatten zwar gedacht, die Virtuelle Maschine (VM) sei optimiert, aber sie arbeitete offensichtlich mit zu vielen Speicherzuweisungen und Referenzzählern. Deshalb sollten jetzt die Datentypen so geändert werden, dass solche “Heap-Zuweisungen minimiert werden“.
Bis jetzt werden alle Werte von der Zend Engine auf dem Heap-Speicher verwaltet. Damit beanspruchen sie die Referenzzählung und den Garbage Collector. Außerdem arbeitet die Zend Engine hauptsächlich mit Zeigern auf die interne Datenstruktur für alle Variablen Zvals.
Die neue Implementierung nutzt keine Zeiger und speichert die Zvals auf dem Stack, in Hashtable-Buckets und Property Slots. Das soll die Operationen auf dem Heap “dramatisch” verringern und vermeidet Referenzzählung und Garbage Collector für die einfacheren Datentypen.
Eine Kompilieranleitung für die neue PHP-Engine findet sich im Wiki.