Neuer JIT Compiler mit 8.4

  • Die Tage gelesen und werde ich auf alle Fälle zeitnah selbst adaptieren, aber was haltet ihr vom neuen JIT Compiler der mit PHP 8.4 kommen soll?

    Damit sollen ja einige Nachteile der aktuellen Implementierung beseitigt werden und noch größere Teile des Anwendungscodes vorab kompiliert werden können.

    Aber auch die Anpassung an verschiedene CPUs/SoC entfällt wohl damit.

    Mehr Infos dazu kann man ja hier im PR auf GitHub lesen:

    A new PHP JIT implementation based on IR JIT framework by dstogov · Pull Request #12079 · php/php-src
    This PR provides a new JIT implementation based on IR - Lightweight JIT Compilation Framework. Despite of the PHP 8.* JIT approach, that generates native code…
    github.com

    Klar würde es die Startzeiten erhöhen wie man ja unter Nachteilen ließt, die hat man ja aber nur einmalig und nicht ständig.

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • entsoannt

  • JIT steht für "Just in Time", also das Code dann kompiliert wird, wenn er benötigt wird

    Klar kann man sich jetzt denken "hä? PHP wird doch immer erst bei Aufruf ausgeführt?", genau!

    Der Unterschied ist, das beim JIT nur das kompiliert wird, was auch für die aktuelle Anfrage nötig ist.

    Klassisch sieht das ja folgendermaßen aus, wenn eine Seite auf PHP basiert:

    - Anfrage an Webserver

    - Webserver leitet Anfrage an PHP-FPM weiter

    - PHP-FPM spawnt einen Worker

    - Worker lädt die Eingangsdatei und alle darin verzweigten Dateien (zB via Autoloader)

    - Anfrage wird bearbeitet, weitere Teile werden nachgeladen und kompiliert

    - Ergebnis wird erzeugt

    - Ergebnis wird von PHP an Webserver zurückgegeben

    - Webserver sendet es an Browser

    - Browser rendert die Ausgabe (HTML)

    Wenn man nun OPCache + JIT verwendet, werden große Teile des Codes zwischengespeichert und nicht bei jedem Aufruf neu kompiliert, was nicht schon kompiliert ist und immer "neu" gebraucht wird, kann der JIT je nach ermessen und Nöten selbst schnell bereitstellen, ohne Abhängigkeiten zu laden die in der aktuellen Anfrage nicht benötigt werden.

    Kombiniert man dann noch OPCache und JIT mit den Möglichkeiten von Swoole oder RoadRunner, kann man die Ladezeiten noch einmal um ein vielfaches drücken, da der ganze Bootstrap komplett entfällt, da man diesen einmalig kompiliert und im Speicher vorhält (ich verwende zB aktuell überall RoadRunner, wechsle aber zukünftig auf Swoole dafür)

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • oha klingt gut.
    Muss man dem Compiler irgendwie sagen was er zwisschenspeichern kann und was nicht oder macht der das automattisch. Und gibt es das auch für PHP 7.4?

  • Muss man dem Compiler irgendwie sagen was er zwisschenspeichern kann und was nicht oder macht der das automattisch.

    Das kommt auf den Modus an was und wie.

    Und gibt es das auch für PHP 7.4?

    Nein und PHP 7.4 ist EOL.

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • Ob du einfach upgraden kannst, kann ich dir nicht sagen, mit PHP 8 wurde alles was in 7.4 deprecated markiert wurde eben entfernt.

    Wenn du kein Pest/PHPUnit verwendest, kannst ja einfach umstellen und so Testen ob alles klappt.

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!