Sven Rautenberg @ HAR2009: Code-Kompilierung: Bringts was?

Beitrag lesen

Moin!

Wie ist das bei PHP? Da gibts IonCube und solche Teile... viele verwenden das wohl, damit sie PHP-Code verkaufen können, ohne dass er einsichtbar wird. Mich würde da viel eher die Geschwindigkeit interessieren. Die werben damit, dass die Ausführung deutlich schneller wird - ist da was dran? Immerhin muss im Gegenzug das ionCube-Modul permanent mitlaufen.

Die Krypto in diesen Modulen ist nicht wirklich stark. Im Prinzip wird der Bytecode, in den der PHP-Interpreter den Source wandelt, einfach nur von einer etwas obskurierten alternativen Runtime-Engine ausgeführt, landet aber trotzdem exakt bei denselben grundlegenden PHP-Routinen. Wenn man sich mit den Interna von PHP auskennt, kann man das zurückverfolgen.

Der Vorteil ist halt, dass der Interpretationsschritt des Sourcecodes wegfällt - das bringt die Geschwindigkeit.

Wenn man den Teil weglassen kann, der den Code verschleiert, dann landet man automatisch bei Dingen wie APC & Co. Diese Module kümmern sich dann nur noch darum, dass existierende PHP-Dateien nach der Interpretation als Bytecode in einem Cache gehalten werden und dann ab dem zweiten Zugriff deutlich schneller geladen und ausgeführt werden können.

Diese Beschleunigung kann man messen, indem man die Zeitdauer misst, die zur Beantwortung eines HTTP-Requests notwendig ist. Das Messen der Ausführungszeit innerhalb des PHP-Skriptes selbst wird nicht die volle Wahrheit präsentieren, weil die Zeitmessung ja erst NACH der Interpretation der aufgerufenen Datei startet, und deshalb allerhöchstens die beschleunigten include() und require()-Aufrufe mit erfasst.

Kann man damit wirklich einen Performance-Schub erreichen?

Ja, allerdings nur bezogen auf die Zeit, die damit draufgeht, PHP zu interpretieren. Das ist durchaus signifikant bei Skripten, die relativ wenig tun, aber im Verhältnis lange zum Interpretieren brauchen. Wenn hingegen die Datenbank ewig für einen Query braucht, hilft APC natürlich nicht.

Und wie kann ich die Geschwindigkeit am sinnvollsten testen? Gibts da etablierte Benchmark-Scripts oder sowas?

Es gibt das Kommandozeilentool "ab" (Apache Benchmark), das nach WUnsch einen oder mehrere Requests abschickt. Außerdem liefert die Extension Firebug (für Firefox) Ladezeiten jeder einzelnen Komponente einer Webseite.

- Sven Rautenberg @ http://har2009.org/