Bon, je l'admets, ce titre est un brin accrocheur et trolleur :-) . Ceci dit, je viens de tomber sur Twitter sur un package PECL que je ne connaissais pas et qui à mon avis ouvre des perspectives très intéressantes, notamment pour améliorer les performances de certaines fonctionnalités chronophage de PHP.
Sur certains de mes tests (voir plus bas), le résultat est juste... 300 fois plus performant !
Ce package, V8JS, permet d'utiliser dans PHP le célèbre V8 JavaScript Engine. Ce moteur, développé par Google et très performant, est le moteur javaScript de Chrome.
On va commencer par installer le moteur en lui-même :
Puis modifier le php.ini pour inclure le module v8js.so
Vous pouvez déplacer le module v8js.so dans le dossier des modules de PHP, ce qui permet d'avoir plus simplement :
Un petit phpinfo() pour vérifier :
les choses sérieuses commencent ! Examinons la documentation. Plutôt simple : on a une classe V8Js, et une méthode executeString() pour appeler le moteur :
On a donc utilisé le moteur javascript pour :
C'est là qu'on tombe dans des choses intéressantes.
Parenthèse :
Attention, comme tout bench, ces mesures sont à remettre dans leur cadre. ici je teste un type de comportement, dans un contexte donné, sur ma machine. De plus c'est orienté, j'ai délibérément choisi quelque chose pour lequel JavaScript excelle.Bref, en voyant ça, je me suis dit : tiens, et si je testais un peu les performances ? J'ai alors cherché un comportement pour lequel JavaScript est particulièrement performant, et qui existe également en PHP. J'ai tout de suite pensé aux fonctions array_reduce / reduce. Voici deux codes qui me semblent comparables.
Voici le premier, en PHP pur :
Dans l'autre, on reporte les calculs sur le moteur JavaScript :
Voici ce que j'obtiens :
Bref, comme je le disais plus haut : un sacré écart !
je n'ai aucun recul sur cette utilisation du moteur V8 au sein de PHP. Le package est d'ailleurs en bétâ. Cependant, je pense que c'est une piste sérieuse si on cherche à reporter certains traitements (particulièrement des calculs) vers JavaScript...
© Jean-François Lépine, 2013 - 2024