Un benchmark est un programme qui permet de se rendre compte de la performance d’un code en langage PHP. Il est possible ensuite d’en comparer plusieurs pour comprendre qu’elle est celui qui est le plus rapide.
Nous allons utiliser le benchmark PHP suivant: PhpBench.
Pour l’utiliser, il faut dans un premier temps installer Composer et connaître son fonctionnement.
Pour nous faciliter la tâche, nous allons installer PhpBench globalement sur notre Mac. Pour cela nous allons utiliser la commande suivante dans le Terminal.
composer global require phpbench/phpbench:0.16.9
Cette commande permet d’installer la version 0.16.9 qui est la version testée lors de la rédaction de ce tutoriel. Bien entendu, vous pouvez utiliser une autre version, mais son fonctionnement n’est pas garanti.
Si ce n’est pas déjà le cas, pour que la commande puisse
fonctionner correctement il faut ajouter le répertoire des fichiers binaires de composer ~/.composer/vendor/bin
au PATH (variable d’environnement) de
votre Mac. Pour cela il faut utiliser le fichier .bash_profile.
Créer ou modifier le fichier .bash_profile en utilisant la commande nano
~/.bash_profile
. Dans ce fichier, ajoutez le contenu ci-dessous.
export PATH=$PATH:~/.composer/vendor/bin
Enregistrez et fermez nano.
Pour vérifier si ce benchmark PHP fonctionne correctement, tapez la commande phpbench
.
Si la liste des commandes disponibles apparaît c’est que tout fonctionnement correctement. Dans le cas
contraire si c’est un message d’erreur qui apparaît bash: commande not
found
, le benchmark n’a pas été correctement installé. Dans ce cas, il faut revoir l’installation.
Créer un fichier qui contiendra une classe. On nommera ce fichier TestBenchmarkBench.php et on le placera à un endroit accessible.
class TestBenchmarkBench
{
/**
* @Revs(1000)
* @Iterations(5)
*/
public function benchBoucleWhile()
{
$a = 0;
while ($a < 100000)
{
$a++;
}
}
/**
* @Revs(1000)
* @Iterations(5)
*/
public function benchBoucleFor()
{
$a = 0;
for ($i = 0; $i < 100000; $i++) {
$a++;
}
}
}
Il faut que le nom du fichier à tester se termine par "Bench" et que les fonctions à tester commencent par "bench".
Dans ce fichier nous testons deux boucles: "boucle while" et "boucle for". L’annotation @Revs
correspondant au nombre d’exécutions consécutives (1000 dans notre l’exemple). L’annotation @Iterations
correspond à la répétition du nombre d’exécutions consécutives précédemment indiquées (5 dans notre cas).
Ensuite nous utilisons cette commande phpbench run TestBenchmarkBench.php --report='{"extends": "aggregate", "cols": ["subject", "mean"]}'
. Le terme "TestBenchmarkBench.php" correspond au nom et au chemin du fichier à tester.
On obtient un tableau avec des résultats.
+------------------+-------------+
| subject | mean |
+------------------+-------------+
| benchBoucleWhile | 1,093.615μs |
| benchBoucleFor | 1,684.797μs |
+------------------+-------------+
On s’aperçoit ici que la "boucle while" est plus rapide que la "boucle for" car le temps moyen pris par toutes les itérations est plus petit pour "while" (1,093.615μs soit environ 1,09 seconde) que "for" (1,684.797μs soit environ 1,68 seconde).
Pour plus de détails, veuillez vous référer à la documentation.
Me parler :
Si vous souhaitez me contacter, vous pouvez accéder à la page d'accueil.