Cross poster ma référence à partir de la version bêta de la documentation SO qui est hors ligne.
Profilage avec XDebug
Une extension de PHP appelée Xdebug est disponible pour aider au profilage des applications PHP , ainsi qu'au débogage d'exécution. Lors de l'exécution du profileur, la sortie est écrite dans un fichier au format binaire appelé "cachegrind". Des applications sont disponibles sur chaque plateforme pour analyser ces fichiers. Aucune modification du code d'application n'est nécessaire pour effectuer ce profilage.
Pour activer le profilage, installez l'extension et ajustez les paramètres php.ini. Certaines distributions Linux sont livrées avec des packages standard (par exemple le php-xdebug
package d'Ubuntu ). Dans notre exemple, nous exécuterons le profil facultativement en fonction d'un paramètre de demande. Cela nous permet de garder les paramètres statiques et d'activer le profileur uniquement si nécessaire.
# php.ini settings
# Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
# Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
# The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
# Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"
Utilisez ensuite un client Web pour faire une demande à l'URL de votre application que vous souhaitez profiler, par exemple
http://example.com/article/1?XDEBUG_PROFILE=1
Au fur et à mesure que la page traite, elle écrit dans un fichier avec un nom similaire à
/tmp/cachegrind.out.12345
Par défaut, le numéro dans le nom de fichier est l'identifiant du processus qui l'a écrit. Ceci est configurable avec lexdebug.profiler_output_name
paramètre.
Notez qu'il écrira un fichier pour chaque requête / processus PHP exécuté. Ainsi, par exemple, si vous souhaitez analyser une publication de formulaire, un profil sera écrit pour la demande GET pour afficher le formulaire HTML. Le paramètre XDEBUG_PROFILE devra être passé dans la demande POST suivante pour analyser la deuxième demande qui traite le formulaire. Par conséquent, lors du profilage, il est parfois plus facile d'exécuter curl pour POSTER directement un formulaire.
Analyse de la sortie
Une fois écrit, le cache de profil peut être lu par une application telle que KCachegrind ou Webgrind . PHPStorm, un IDE PHP populaire, peut également afficher ces données de profilage .
KCachegrind, par exemple, affichera des informations, notamment:
- Fonctions exécutées
- Temps d'appel, à la fois lui-même et incluant les appels de fonction ultérieurs
- Nombre de fois que chaque fonction est appelée
- Graphiques d'appel
- Liens vers le code source
Ce qu'il faut chercher
De toute évidence, l'optimisation des performances est très spécifique aux cas d'utilisation de chaque application. En général, il est bon de rechercher:
- Appels répétés à la même fonction que vous ne vous attendez pas à voir. Pour les fonctions qui traitent et interrogent les données, cela pourrait être une excellente opportunité pour votre application de mettre en cache.
- Fonctions à fonctionnement lent. Où l'application passe-t-elle la plupart de son temps? le meilleur gain dans l'optimisation des performances se concentre sur les parties de l'application qui consomment le plus de temps.
Remarque : Xdebug, et en particulier ses fonctionnalités de profilage, sont très gourmandes en ressources et ralentissent l'exécution PHP. Il est recommandé de ne pas les exécuter dans un environnement de serveur de production.