Pour effectuer le test de performance comparatif entre le composant provenant du Zend Framework et l'alternative programmée maison dont je parlais hier, Matt O'Phinney n'avait pas de benchmark sous la main mais me suggérait d'utiliser XDebug pour mesurer le temps d'exécution.
Selon lui, je ne devrais pas avoir de mauvaise surprise dans la plupart des cas d'utilisation normale avec le composant ZF car la mécanique interne utilise un "di-cyclic graph" (graphique dicyclique ? Ça dépasse mes connaissances mathématiques, je devrai me le faire expliquer)...
En effet, j'ai réalisé le premier test de 1000 appels mesuré à 0,29 secondes d'exécution. Pour obtenir le résultat, j'ai dû installer l'extension XDebug sur mon environnement de tests à la maison (EasyPHP 3.0, Windows).
Sur Windows, c'est un jeu d'enfant :
- Déterminez la version de PHP utilisée (5.2 dans mon cas)
- Téléchargez le bon DLL (j'ai pris php_xdebug-2.1.0-5.2-vc6.dll) et déposez le dans le répertoire d'extensions de PHP. Par défaut : C:\Program Files\EasyPHP 3.0\php\ext
- Vous pouvez optionnellement faire analyser le contenu de phpinfo() avec ce parser. Il vous indiquera la procédure à suivre et vous pourrez analyser le tout à nouveau pour voir si c'est installé correctement
- Dans php.ini, ajoutez la ligne suivante :
zend_extension_ts = "C:\PROGRA~1\EASYPH~1.0\\php\ext\php_xdebug-2.1.0-5.2-vc6.dll" - Il faut s'assurer que l'extension est chargée avec le Zend Engine (zend_extension_ts = valeur) et pas sous la forme "extension = valeur". Contrairement à ce que le parser me proposait comme configuration, j'ai ajouté les guillemets pour entourer le chemin du DLL.
- Rédémarrer le serveur Apache
Dans cet exemple de code PHP qui lance un warning de division par zéro ($var = 1/0;), une erreur qui est affichée normalement à l'écran (display_errors de php.ini) :
Warning: Division by zero in D:\Programmation\Web\Projets\tests\xdebug.php on line 2
Sera plutôt affichée avec de l'information bonifiée avec XDebug :
Pour calculer le temps d'exécution dans le script principal qui utilise ZF, j'ai pris la méthode simple qui consiste à obtenir un timestamp au début du script et de le soustraire à un autre qui se trouve à la fin.
$start = xdebug_time_index();En fait, ça me donne exactement le même temps que si j'avais utilisé cette technique pour mesurer le temps d'exécution d'un script mais XDebug offre des fonctionnalités avancées qui permettent de suivre la trace complète, le profilage, la performance, les paramètres des fonctions, etc, et montrer concrètement à quel endroit se trouve le "bottleneck" lorsqu'il y a une perte de performance importante à une des étapes. XDebug est à privilégier pour parfaire vos techniques de débogage.
/* le script à mesurer ici */
$end = xdebug_time_index();
echo $end - $start;