< Retour

Utiliser sur un Mac un benchmark PHP pour comparer du code

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 langage 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 garanti.

Ajouter le dossier des exécutables de composer au Path

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.

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 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 class

Créer un fichier qui contiendra une classe. 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’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).

Documentations

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

Je veux parler avec Henrique

Me parler :

Si vous souhaitez me contacter, vous pouvez accéder à la page d'accueil.

Attendre
Patientez ...