Sven: Code-Kompilierung: Bringts was?

Hallo ihr,

ich musste kürzlich an die ganzen neuen JavaScript-Engines denken (Nitro, V8, TraceMonkey...). Diese sollen ja deshalb so schnell sein, weil sie den JavaScript-Code vor der Ausführung kompilieren.

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.

Kann man damit wirklich einen Performance-Schub erreichen? Machen das YouTube & Co. auch in dieser Art und Weise?

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

Vielleicht könnt ihr mir ein wenig helfen. Ich weiß, Googlen hilft. Aber mich interessieren nicht irgendwelche Blog-Einträge oder Werbeversprechen, sondern vor allem eure Meinungen.

Vielen Dank!

Grüße
Sven

  1. echo ($light == true) ? 'Guten Tag,' : 'Guten Abend,';

    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.

    Also von IonCude habe ich noch nichts gehört, aber ich benutze für die Beschleunigung von PHP Scripten eAccelerator. Dort steckt ein ähnliches Verfahren dahinter (PHP Scripte werden im Compilierten zustand im RAM gespeichert).

    Kann man damit wirklich einen Performance-Schub erreichen? Machen das YouTube & Co. auch in dieser Art und Weise?

    Ob Seiten wie Youtube dies so machen kann ich dir nicht sagen, aber unter den richtigen Umständen kann man damit einen gewissen Performance-Schub erreichen. Auf der Webseite von eAccelerator steht das eine Steigerung von um das bis zu 10-Fache möglich ist. Aus eigener Erfahrung habe ich aber nur eine Steigerung von 30%-50% bemerkt (wobei ich auch nur bei 4-5 Scripten einen Vorher/Nachher-Test gemacht habe um sicherzustellen das alles Funktioniert etc.).

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

    Also ich habe nur die Ausführungszeit in ms gemessen. Bei google findet man aber einige Benchmarks (suche nach eAccelerator+Benchmark) die wahrscheinlich durchdachter sind.

    Grüße

    Markus

    --
    Langeweile? Sudoku online spielen ;)
  2. 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/