devdev / in the loop

PHP 8 e JIT

Cos’è JIT?

PHP 8 avrà un nuovo motore, basato sull’architettura JIT, che sta per “Just In Time”. Come sappiamo, PHP è un linguaggio interpretato, non compilato come invece accade per C o Java. Viene “letto” e tradotto in linguaggio macchina in fase di esecuzione (runtime).

JIT, invece, è una tecnica che compilerà parti del codice al runtime, così da poterle utilizzare direttamente.

Possiamo pensare, come una specie di “versione in cache” del codice interpretato, che viene generata in fase di runtime.

Come raccontato nella rfc ufficiale, il salto di velocità che avvenne ai tempi della release di PHP 7 nel 2011 fu un primo tentativo di implementare JIT, ma non fu mai proposto per la release finale per tre motivi principali perché non si evidenziavano sostanziali passi avanti per quanto riguarda la velocità delle Web app.

Oggi invece, JIT verrà ufficialmente incluso in PHP 8, in quanto le alternative sono tutte state sfruttate al massimo e JIT resta il driver principale per guadagnare velocità nell’esecuzione.

Come funziona?

In linea di principio, esiste un componente che monitora il nostro codice in esecuzione. Quando rileva che delle parti di esso vengono eseguite più volte, segnerà queste parti di codice come “warm” oppure “hot” a seconda della loro frequenza. Queste parti vengono quindi compilate e utilizzate al volo, anziché eseguire il codice in modo tradizionale. Se questo concetto vi interessa, potete approfondirlo in questo articolo di Mozilla.

Il compilatore JIT, quindi, dovrebbe aiutare le performance dei nostri script, ma varia da scenario a scenario.

Da scenario a scenario

In questo demo, vengono generati dei frattali in real time utilizzando PHP. Nella parte sinistra dello schermo PHP 7.0 utilizza JIT, mentre a destra no. Possiamo vedere che il guadagno prestazionale è enorme ..ma non è tutto oro quello che luccica. Nel caso dei frattali, per sua natura il concetto di “codice ripetuto” è portato all’estremo, e da qui l’aumento enorme di velocità. Probabilmente non sarà molto efficace con le Web app, questo perché il codice “hot” da poter compilare e ri-eseguire non sarà molto frequente in questo scenario.

L’altro lato della medaglia è che si apriranno le porte (ed è questa una delle volontà degli sviluppatori di PHP) agli scenari CPU-intensive che appunto non girano sul web, rendendo PHP un linguaggio utilizzabile anche in contesti non-www, dove oggi è sicuramente poco considerato.

PHP e il futuro

Anche se probabilmente JIT non porterà un significativo incremento di velocità, dovremmo considerare le possibilità future che la community PHP potrà offrire, soprattutto nell’ottica nella quale PHP smette di essere un linguaggio “web-only” e diventa quindi un linguaggio di programmazione “generico” (in senso positivo). Questo fa sì che l’investimento che oggi si fa in questa tecnologia può sicuramente avere un bel futuro.

Questo articolo ti è stato utile?
PHP – LETTURA 6 MINUTI PHP 8: l’operatore null-safe
L’introduzione dell’operatore null coalescing con PHP 7 è stato un buon passo avanti per la pulizia del codice, ma non…
Laravel – LETTURA 4 MINUTI Aggiungere phpMyAdmin a Laravel Sail
Anche se a questo punto lo sapete già, è giusto dire che phpMyAdmin è sicuramente il tool dbms open  source…
PHP – LETTURA 4 MINUTI Usare glob() in PHP per elencare i file di una directory
Spesso abbiamo utilizzato (lo so, l’avete fatto anche voi) la combinazione di opendir(), readdir() e closedir() per elencare i file…
PHP – LETTURA 5 MINUTI Installare PHP su macOS Monterey con homebrew (anche su M1)
L’ultima versione di macOS 12 Monterey non porta più con sé preinstallato PHP. Difatti, una nota nel conf http.conf di…
Roba figa da
if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.