Benchmark des fonctions FOR et FOREACH en PHP (5.6, 7.0, 7.1)

Afin d’élucider la question perpétuel concernant les performances d’une boucle FOR contre une boucle FOREACH, j’ai décidé ce matin d’effectuer quelques recherches et quelques tests. Mes recherches m’ont mené à cette question de srcspider sur Stack Overflow « Performance of FOR vs FOREACH in PHP« . Suite aux réponses de ircmaxell (blog, github), j’ai décidé de créer un test incluant les boucles FOR puisque l’exemple n’incluait que les boucles FOREACH (Voir le benchmark sur Gist). Suite à quoi, j’ai décidé de tester le même code sur différentes version de PHP afin de connaître l’impact des nouvelles optimisations offerte par PHP 7.0 et 7.1.

Je peux donc affirmer que je suis agréablement surpris de voir, que grâce à PHP7, les boucles FOREACH sont non seulement plus facile d’utilisation que les FOR, mais elle offre maintenant des rendements très similaires !

Modus Operandi

Liste des tests (100 000 entrées par test)

  • Test 1 FOREACH : Ajouter +1 à la valeur de chaque entrée
  • Test 2 FOREACH : Ajouter +1 à la valeur de chaque entrée (valeur des entrées passer par référence)
  • Test 3 FOREACH : Effectuer la boucle sans rien exécuter
  • Test 4 FOREACH : Effectuer la boucle sans rien exécuter (valeur des entrées passer par référence)
  • Test 5 FOR : Ajouter +1 à la valeur de chaque entrée
  • Test 6 FOR : Effectuer la boucle sans rien exécuter

Lancer 10 fois la suite de test pour chaque version de PHP afin d’avoir une « moyenne ». Malgré que l’échantillonnage soit très restreint, il nous donne quand même une certaine idée de la moyenne de temps utilisés lors de l’exécution.

Résultats, moyennes, conclusion

Après avoir exécuté 10 fois chacun des tests, j’ai récolté les résultats (voir les résultats) et je suis arriver au résultats ci-dessous (voir le calcul des résultats).

Moyenne du temp d’exécution sous PHP 7.1

Test 1 : 0.0038119316101074 secondes
Test 2 : 0.0044445514678955 secondes
Test 3 : 0.0014986991882324 secondes
Test 4 : 0.0017160177230835 secondes
Test 5 : 0.0025763273239136 secondes
Test 6 : 0.00099947452545166 secondes

Moyenne du temp d’exécution sous PHP 7.0

Test 1 : 0.0027291774749756 secondes
Test 2 : 0.0035131454467774 secondes
Test 3 : 0.0013694047927856 secondes
Test 4 : 0.0018276929855347 secondes
Test 5 : 0.0032925844192505 secondes
Test 6 : 0.00094027519226074 secondes

Moyenne du temp d’exécution sous PHP 5.6

Test 1 : 0.016055011749268 secondes
Test 2 : 0.0044074773788452 secondes
Test 3 : 0.002969479560852 secondes
Test 4 : 0.0036835193634033 secondes
Test 5 : 0.0060200929641724 secondes
Test 6 : 0.0023192644119263 secondes

Conclusion

Il apparaît clairement que les résultats de PHP 7.0 et 7.1 sont très semblables, ils dépassent en rapidité les résultats de PHP 5.6. De plus, le FOREACH est plus rapide en 7.0 et 7.1 qu’un FOR en 5.6 !

Image de l'article : http://www.peency.com/code-php-objet-wallpaper-2435

Auteur : Jonathan Lafleur

Développeur de solutions.

Laisser un commentaire

Votre adresse de courriel ne sera pas publiée. Les champs obligatoires sont indiqués avec *