Incontro Febbraio 2014 – HHVM, Phalcon e Pthreads

L’incontro di febbraio, più che un talk,  è stata una sessione collaborativa su diversi argomenti, partendo da HHVM.

Abbiamo installato su una macchina virtuale, creata con Vagrant, una Debian Wheezy, seguendo poi le istruzioni del Wiki su Github, con in parallelo la versione standard di PHP della distribuzione (“apt-get install php5”). Per velocizzare i tempi e non scriverci da zero il codice per fare benchmarking, abbiamo scaricato uno script che calcola i tempi di esecuzione di alcune funzionalità di base del linguaggio. Questi sono stati i risultati:
Schermata 2014-02-27 alle 10.09.41 Schermata 2014-02-27 alle 10.09.54
HHVM compila il codice e lo salva in un db SQLite, recuperandolo agli avvii successivi, ma dal test consecutivo fatto non sembra aver dato risultati migliori:
Schermata 2014-02-27 alle 10.41.53
Inoltre, facendo girare un’applicazione esistente è emerso che non tutte le estensioni PHP sono disponibili attualmente. Non abbiamo indagato ulteriormente (e ci riserviamo di farlo),  ad una prima analisi perciò, ci è sembrato più performante  e meno problematica una soluzione PHP + OPCache.

Parlando di benchmark e codice precompilato, è naturalmente emerso Phalcon, un interessante framework MVC scritto in C e compilato come estensione PHP.  E’ un esperimento degno di nota, ma tra gli svantaggi che può portare c’è la poca flessibilità delle API interne (se non si ha dimestichezza con C e moduli precopilati) e la diffusione del progetto (Trends, Github, Github Pulse).

E’ stato poi il turno di Pthreads e processi multipli in background. La discussione è emersa dall’esigenza di utilizzare più risorse all’interno di un’esecuzione, in modo asincrono e perciò non bloccante. Questa estensione Pecl ci è sembrata un’alternativa interessante alla gestione dei processi con l’utilizzo di exec o shell_exec o servizi più complessi.

Qualche spunto di riflessione anche sul Garbage Collector e problemi sulla gestione della memoria con le Closure nelle prime versioni di PHP 5.3.