Bonjour
Depuis 1 semaine, je me prend la tête à essayer de m'expliquer pourquoi PHP est il si lent pour un script créant un certain nombre de permutations sur un tableau d'entiers, comparé à JavaScript.
Mes scripts sont parfaitement rodés, optimisés etc... (J'utilise un seul tableau dont je modifie l'ordre des index).
Je suis parti du script javascript que j'ai adapté au PHP.
Résultats, pour JavaScript, un tableau de 12 élements (479 001 600 permutations):
- environ 14s sous Chromium
- environ 69 s sous opera (déjà 4 fois plus lent)
- autre navigateurs (Firefox, Qupzilla), messages d'alertes...
Résultats pour JavaScript pour un tableau de 10 éléments (3 628 800 permutations):
- 0.11 s sous chromium
- 0.48s sous Opera
- 0.16s pour seamonkey
- 0.54s pour qupzilla
- 0.16s pour firefox
Résultat pour le même nombre d'élément (10) avec les 3 628 800 en PHP (mode console, c'est à dire en tapant "php myscript.php"):
13 secondes!
Soit un temps d'exécution au mieux x26 comparé à JavaScript, et au pire X100! (Et je ne parle pas du temps que ça aurait mis avec 11 éléments, où on est à 136s).
Pourquoi cette lenteur ? Il me semblait que le moteur Zend faisait une compilation du script à la volée et que le code devait donc être "rapide", or ce n'est pas le cas.
J'ai eu beau chercher un moyen de voir s'il n'y avait pas des directives qui pourraient améliorer le temps d'exécution, mais en fait il n'y a rien! Le code n'utilise que peu de mémoire (un seul tableau de 10 ou 12 éléments) et si j'enlève la partie tri sélection (nécessaire pour les permutations), le temps est juste divisé par 2. Je précise qu'en mode serveur Apache, les temps d'exécution sont du même ordre.
Alors j'ai lu quelque part que PHP 7 était largement optimisé au niveau des vitesses d'exécution, je pense que c'est pas un luxe au vie de ces résultats.
Ma question est donc, y-a-t-il un moyen d'améliorer les performances de PHP pour diviser le temps d'exécution au moins par 5 ?