Lorsqu'un script PHP est trop long à l'exécution, il peut-être utile d'établir son profil afin de déterminer les fonctions nécessitant une optimisation.

Source : Profiling PHP Scripts sur http://xdebug.org/

Installation des outils

Il faut commencer par installer l'extension xdebug disponible dans les dépôts Fedora :

yum install php-pecl-xdebug

Puis installer l'outil d'analyse graphique des traces : KCacheGrind

yum install kdesdk

Configurer et activer l'outil d'enregistrement des traces

Après son installation, l'extension est activé dans le fichier /etc/php.d/xdebug.ini. On pourra modifier ce fichier.

; Activation de l'extension xdebug
zend_extension=/usr/lib64/php/modules/xdebug.so 
; Activation de l'enregistrement des traces
xdebug.profiler_enable=1
; Dossier d'enregistrement
xdebug.profiler_output_dir=/tmp

A l'issu des tests, il est préférable de désactiver ces options qui pénalisent très sensiblement les performances.

Enregistrer des traces

Dans le cas d'un script en ligne de commande, il suffit de le lancer.

Dans le cas d'une application web, il est préférable d'exécuter apache en mode debug pour éviter la création de processus multiples qui auront chacun leur fichier de traces.

service httpd stop
httpd -X

Après avoir utiliser l'application, il suffira d'arreter apache en le tuant (Ctrl-C).

Les traces sont collectées dans le fichier /tmp/cachegrind.out.####, (ou #### est le numéro du processus).

Analyse des traces

Il suffit de lancer l'application KCacheGrind (menu Applications / Programmation) et d'ouvrir le fichier créé.

Le premier état permet de connaitre rapidement les fonctions qui consomme le plus de temps d'exécution :

Qu'il est possible de visualiser graphiquement :

Un autre graphique permet de voir les enchainements d'appels de manière simple, avec la consommation de temps très lisible :

A noter qu'il est aussi possible de consulter directement les sources du script depuis l'application.

Conclusion

Il ne s'agit que d'un petit guide pour vous mettre sur la voie. A vous de découvrir maintenant plus en détail les possibilités de ces outils.

Ils m'ont permis de découvrir plusieurs points d'optimisation et de réaliser des gains de performances significatifs dans mes développements.