PRATIQUE PHP 
Faire du profiling de code PHP
 
Débusquer les goulets d'étranglement de son code pour savoir où les optimisations deviennent nécessaires. (08/06/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

L'amélioration de la vitesse d'exécution est l'une des premières problématiques des développeurs. Nombreux sont ceux qui résolvent ce problème en utilisant exclusivement des langages réputés rapides (C++, C, voire assembleur). Cependant, toutes les parties d'une application n'ont pas forcément besoin d'avoir un support de type statique. Seuls certains composants en profiteront, les plus lents, appelés "goulets d'étranglement" (bottlenecks).

L'objectif devient donc de débusquer le plus rapidement et le plus correctement possible ces goulets, afin de savoir quel code revoir. C'est pour cela que sont apparues au fil des années des solutions de profiling de code, ou profilage. Ces solutions mesurent le temps de traitement d'une partie du code (le plus souvent, fonction par fonction), et affiche ces temps classés du plus long au plus court. Reste alors à retravailler les codes lents.

PHP dispose de quelques programmes notables en la matière. Le plus connu reste assurément XDebug, conçu avant tout pour le débogage de code, mais dont les fonctionnalités de profiling se révèlent vite utiles. D'autres débogueurs ont aussi des fonctions de profiling, comme PECL::APD ou DBG. De son côté, PEAR::Benchmark mesure seulement le temps d'exécution - mais est intimement lié à PEAR::PHPUnit. Pour le code SQL, les utilisateurs de la bibliothèque ADOdb peuvent profiter du module Performance Monitoring.

Gratuite et activement développée, XDebug est la solution vers laquelle on se dirige le plus naturellement. Téléchargez la version conçue pour votre environnement (dans notre cas, module Windows pour PHP 5.1.1+), et placez-le dans le dossier /modules ou /ext de votre installation PHP. Modifiez ensuite le fichier php.ini pour pointer vers la DLL :

zend_extension_ts = "c:/Program Files/wamp/php/ext/php_xdebug-5.1.1-2.0.0beta5.dll"

En lançant le phpinfo() de votre installation, vous devriez maintenant voir l'extension xdebug installée. Ajoutez la ligne suivante à votre php.ini pour que XDebug 1 se lance pour chaque script (laissez sur 0 pour qu'il ne se lance pas). La seconde ligne sert à spécifier le chemin où enregistrer le fichier de profiling.

xdebug.auto_profile = 1
xdebug.profiler_output_dir = "C:/Program Files/wamp/tmp"


Pour XDebug 2, il faudra ajouter la ligne suivante :

xdebug.profiler_enable = 1

Lancez ensuite le script, et récupérez le fichier créé dans /tmp, de la forme cachegrind.out.xxxxxxxxxxx. Tel quel, le fichier n'est pas exploitable, même pour une petite application : il vous faudra installer un programme capable d'interpréter correctement ces informations. Pour Windows, WinCacheGrind fait référence, tandis que Linux dispose de KCacheGrind. Chargez-y simplement le fichier cachegrind, et les résultats seront immédiats.

Résultat avec JPgraph dans WinCacheGrind.
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page