Azur Web
Henrique Rodrigues
Développeur Web

Utiliser sur un Mac un benchmark PHP pour comparer du code

PHP

Composer

Terminal

Qu'est ce qu'un benchmark PHP

Un benchmark est un programme qui permet de se rendre compte de la performance d'un code en language PHP. Il est possible ensuite d'en comparer plusieurs pour comprendre qu'elle est celui qui est le plus rapide.

PhpBench: benchmark

Nous allons utiliser le benchmark php suivant: PhpBench.

Pour l'utiliser il faut dans un premier temps installer Composer et connaître son fonctionnement.

Installer PhpBench

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 garantie.

Ajouter le dossier des exécutables de composer au Path

Si ce n'est pas déjà la 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.

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.

Se servir de PhpBench

Pour vérifier que ce benchmark php fonctionne correctement taper 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 class

Créer un fichier qui contiendra une class. On nommera ce fichier TestBenchmarkBench.php et on le placera à un endroit accessible.

Fichier TestBenchmarkBench.php

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'apperç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 secondes) que "for" (1,684.797μs soit environ 1,68 secondes).

Documentations

Pour plus de détails veuillez vous référer à la documentation.

Email
Cela ne fontionne pas.