Profilage php. Profilage et débogage d'applications PHP avec xhprof et FirePHP


Parfois, ViewProfile.swf et autres erreurs système SWF peuvent être liées à des problèmes dans le registre de Windows. Plusieurs programmes peuvent utiliser le fichier ViewProfile.swf, mais lorsque ces programmes sont désinstallés ou modifiés, des entrées de registre SWF « orphelines » (incorrectes) restent parfois.

Fondamentalement, cela signifie que même si le chemin réel du fichier peut avoir changé, son ancien emplacement incorrect est toujours enregistré dans le registre Windows. Lorsque Windows essaie de trouver ces références de fichier incorrectes (emplacement du fichier sur votre PC), des erreurs ViewProfile.swf se produisent. De plus, une infection par un logiciel malveillant peut avoir corrompu les entrées de registre associées à Bioshock 2. Par conséquent, ces entrées de registre SWF corrompues doivent être corrigées pour résoudre le problème à la racine.

Éditer manuellement le registre de Windows pour supprimer les clés ViewProfile.swf invalides n'est pas recommandé, à moins que vous ne soyez un professionnel de services informatiques. Les erreurs commises lors de la modification du registre peuvent rendre votre PC inutilisable et causer des dommages irréparables à votre système d'exploitation. En fait, même une virgule placée au mauvais endroit peut empêcher votre ordinateur de démarrer !

En raison de ce risque, nous vous recommandons fortement d'utiliser un nettoyeur de registre fiable tel que WinThruster (développé par Microsoft Gold Certified Partner) pour analyser et réparer tout problème de registre lié à ViewProfile.swf. À l'aide d'un programme de nettoyage de registre, vous pouvez automatiser le processus de recherche des entrées de registre corrompues, des références de fichiers manquantes (comme celles qui provoquent l'erreur ViewProfile.swf) et des liens rompus dans le registre. Avant chaque analyse, une copie de sauvegarde est automatiquement créée, vous permettant d'annuler toute modification en un clic et vous protégeant d'éventuels dommages à votre ordinateur. Le meilleur, c’est que l’élimination des erreurs de registre peut améliorer considérablement la vitesse et les performances du système.


Avertissement: Sauf si vous êtes un utilisateur de PC expérimenté, nous NE recommandons PAS de modifier manuellement le registre Windows. Une utilisation incorrecte de l'Éditeur du Registre peut entraîner de graves problèmes pouvant nécessiter la réinstallation de Windows. Nous ne garantissons pas que les problèmes résultant d'une utilisation incorrecte de l'Éditeur du Registre puissent être corrigés. Vous utilisez l'Éditeur du Registre à vos propres risques.

Avant de réparer manuellement le registre Windows, vous devez créer une sauvegarde en exportant une partie du registre associé à ViewProfile.swf (par exemple Bioshock 2) :

  1. Cliquez sur le bouton Commencer.
  2. Entrer " commande"V barre de recherche... NE CLIQUEZ PAS ENCORE ENTRER!
  3. Tout en maintenant les touches enfoncées CTRL-Maj sur votre clavier, appuyez sur ENTRER.
  4. Une boîte de dialogue d'accès s'affichera.
  5. Cliquez sur Oui.
  6. La boîte noire s'ouvre avec un curseur clignotant.
  7. Entrer " regedit" et appuyez sur ENTRER.
  8. Dans l'Éditeur du registre, sélectionnez la clé associée à ViewProfile.swf (par exemple Bioshock 2) que vous souhaitez sauvegarder.
  9. au menu Déposer sélectionner Exporter.
  10. Sur la liste Enregistrer dans Sélectionnez le dossier dans lequel vous souhaitez enregistrer votre clé de sauvegarde Bioshock 2.
  11. Sur le terrain Nom de fichier Entrez un nom pour le fichier de sauvegarde, par exemple "Sauvegarde Bioshock 2".
  12. Assurez-vous que le champ Plage d'exportation valeur sélectionnée Branche sélectionnée.
  13. Cliquez sur Sauvegarder.
  14. Le fichier sera enregistré avec extension .reg.
  15. Vous avez maintenant une copie de votre entrée de registre associée à ViewProfile.swf.

Les étapes suivantes pour modifier manuellement le registre ne seront pas décrites dans cet article, car elles sont susceptibles d'endommager votre système. Si vous souhaitez plus d'informations sur la modification manuelle du registre, veuillez consulter les liens ci-dessous.

Le profilage d'application est la collecte de données sur la vitesse d'exécution de diverses sections de programme (fichiers et fonctions). Il existe de nombreux outils de profilage PHP, mais tous les outils ne sont pas adaptés pour effectuer des analyses directement sur un site de production.

XHProf et son fork Tideways est un profileur pratique et simple qui peut collecter efficacement des statistiques sur le fonctionnement d'une application sans pratiquement aucune réduction de la vitesse de votre application (ou de votre site Web).

Pourquoi un code de profil ?

Si l'application commence à fonctionner lentement (lire « le site a commencé à ralentir »), le profilage vous permettra de savoir quelle partie est la plus lente. Le résultat du profilage est généralement une liste de fonctions exécutées ainsi que leur durée d'exécution.

Le profilage du code doit venir en premier dans le processus d'optimisation des applications. Tout le reste ne serait que conjecture et très probablement faux. Vous devez savoir exactement ce qui cause les problèmes et les « freins ».

Le profilage est une procédure permettant de collecter et d'organiser des statistiques sur le temps d'exécution du code. Il ne s’agit pas d’un processus d’optimisation ou de modification de programme. Le résultat de ce processus est généralement un rapport détaillé sur les composants du programme et les statistiques de performances des fonctions.

C’est exactement pour cela que la solution XHProf a été développée. Il est conçu pour fonctionner sur de vrais sites Web. L'idée principale de ce profileur est de créer une charge minimale sur l'application, tout en collectant toutes les données nécessaires sur la vitesse de fonctionnement. La solution a été développée par des spécialistes de Facebook.

Comment connecter automatiquement le profileur php ?

Nos spécialistes ont travaillé dur et ont rendu ce processus complètement automatisé.
Il vous suffit de vous connecter, de sélectionner le domaine souhaité dans l'onglet « Domaines », de cliquer sur l'icône « PHP.INI + PHP Profiler » et de cocher la case « Domain Profiler ».

L'activation de cette fonctionnalité peut prendre un certain temps, généralement pas plus de 10 minutes.

Pour les versions PHP 5.2, 5.3, 5.4, 5.5, 5.6, 7.0, nous utilisons le profileur XHProf, pour les versions PHP 7.1 et supérieures, nous utilisons le profileur Tideways.

Une fois activé, sur chaque page de votre site traitée par PHP, un bloc spécial avec des liens vers le fichier de rapport sera intégré en bas de celui-ci (le lien ressemblera à ceci :

Nom de domaine.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX&source=someapp)

Et voici à quoi ressemblera le fichier de rapport :

Le tableau contient une liste des fonctions exécutées sur une seule page avec des informations supplémentaires :

  • Appels - nombre et pourcentage d'appels de fonction
  • Incl. Wall Time - temps d'exécution d'une fonction avec des fonctions imbriquées
  • Hors. Wall Time - temps d'exécution de la fonction sans fonctions imbriquées
  • Incl. CPU - temps processeur avec fonctions imbriquées
  • Hors. CPU - temps processeur sans fonctions imbriquées
  • Incl. MemUse - consommation de mémoire avec fonctions imbriquées
  • Hors. MemUse - consommation de mémoire sans fonctions imbriquées
  • Incl. PeakMemUse - consommation de mémoire maximale avec fonctions imbriquées
  • Hors. PeakMemUse - consommation de mémoire maximale sans fonctions imbriquées

Il convient de noter que le rapport construit à l'aide des marées peut être légèrement différent visuellement de ce rapport, mais l'essence ne change pas.

Rapports graphiques


Les sections du code gourmandes en ressources sont surlignées en jaune (moyen) et rouge (le plus lourd). Ce sont ces sections de code qui utilisent beaucoup de ressources par rapport au reste du programme. Il peut s'agir d'une fonction lente ou de plusieurs appels à une fonction rapide. Dans notre exemple, nous voyons que la fonction mysqli_multi_query() est marquée en rouge car elle s'exécute la plus lentement.

Rapports agrégés

L'interface XHProf vous permet également d'afficher les informations globales de plusieurs rapports à la fois. Pour ce faire, run_id est passé séparé par des virgules :

Nom de domaine.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX,YYYYYYYYYYYY&source=someapp

Caractéristiques techniques

    L'inclusion automatique du profileur est implémentée à l'aide des directives auto_append_file et auto_prepend_file, qui connectent deux fichiers php exécutables :

    — auto_append_file initialise l'objet de collecte de statistiques et commence son travail ;

    — auto_prepend_file complète la collecte des statistiques et génère un fichier de rapport avec des statistiques (au format JSON) ;

    Si exit() ou die() est appelé pendant l'exécution de votre script, auto_prepend_file ne sera pas exécuté. le fichier de statistiques ne sera pas généré et un bloc avec des liens vers le fichier de rapport ne sera pas inclus au bas de la page.

  1. Ainsi, accéder à n'importe quelle page traitée par php déclenchera la création d'un nouveau fichier de rapport, nous recommandons donc de désactiver le profileur après la collecte des statistiques (généralement quelques heures), afin d'éviter de dépasser le quota du disque, qui peut être épuisé après la génération d'un un grand nombre de rapports!
  2. Important : le profileur ne fonctionnera que si le site est connecté au serveur via un chemin standard, par des moyens automatiques (c'est-à-dire en utilisant le panneau de contrôle de l'hébergement), sinon vous devez contacter le support technique d'Hostland pour configurer le profileur.
  3. En mode automatique, le profileur se connecte uniquement au nom de domaine principal ; le profileur n'est pas automatiquement connecté aux sous-domaines.
  4. En mode automatique, le profileur collecte des statistiques uniquement pour les scripts avec l'extension .php et .php5
  5. Il n'est pas possible de garantir un fonctionnement ininterrompu du site après la connexion du profileur PHP. Par conséquent, si le site ne fonctionne pas correctement lorsque le profileur est activé, il doit être désactivé et le profilage doit être poursuivi par d'autres moyens.

Résumons-le

Nous espérons que cet outil vous aidera à rendre vos sites encore plus rapides sur l'hébergement Hostland.

L'article utilise partiellement les documents de l'utilisateur Den Golotyuk publiés sur le site Web.

Balakat Obsesslav. Souf. dérivé de balaka« bavard(s) », formés tour à tour à l'aide du suf. -alias) depuis « conversation, bavardage » (du même radical, mais avec le suf. -l-, comme , cm.). Mots , des balles(pluriel) « conversation, bavardage » dans les dialectes et autres slaves. langue sont encore connus aujourd'hui. Cm. .

Dictionnaire étymologique scolaire de la langue russe. Origine des mots. - M. : Outarde. N.M. Shansky, T.A. Bobrova. 2004 .

Voyez ce qu'est « balakat » dans d'autres dictionnaires :

    babiller- parler, discuter, gribouiller (Dal) Voir... Dictionnaire de synonymes

    TIGE- BALKAK, je babille, tu babilles, immature. (région). Discutez, parlez. Dictionnaire explicatif d'Ouchakov. D.N. Ouchakov. 1935 1940... Dictionnaire explicatif d'Ouchakov

    TIGE- sud babillage Perm. parler, discuter, parler, gribouiller. Balakanya mercredi. bavarder. Balakusha, balaka ob., sud, balyaka perm., balakar, bavard, causeur. Balakar, sois un bouffon, plaisante comme les bouffons officiels. Balakir mâle, inférieur, kazakh,... ... Dictionnaire explicatif de Dahl

    babiller- discuter, dire des bêtises, ukrainien. Balakati, blr. Balakat, polonais baɫakac. Bavarder ou babiller; voir Bernecker 1, 40 ; Mi. EW 5. Un autre niveau d'alternance de voyelles : ukrainien. essayez de marmonner, polonais. beɫknąc – le même, tchèque. blknouti; Épouser Chakhmatov,... ... Dictionnaire étymologique de la langue russe par Max Vasmer

    Balakat- Nessov. trans. et sans interruption. décomposition Parlez, discutez. Dictionnaire explicatif d'Éphraïm. T.F. Efremova. 2000... Dictionnaire explicatif moderne de la langue russe par Efremova

    babiller- balakat, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balakal, balakala, balakalo, balakali, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka,... .. . Formes de mots

Il montrait comment installer et configurer xdebug et couvrait certaines fonctionnalités de base, telles que l'amélioration du résultat de la fonction var_dump() ou l'impression d'une trace de la pile d'appels lors de la réception d'un message d'erreur. Dans la deuxième partie, nous avons examiné cette fonctionnalité de xdebug en tant que traçage. La trace contient tous les appels aux fonctions et méthodes du programme, l'heure de démarrage, éventuellement la taille de la mémoire, les paramètres passés et renvoyés. Un journal de trace peut vous aider à comprendre le chemin d'exécution d'un programme complexe. Au lieu d'insérer du code de débogage dans le programme, vous activez ou désactivez le traçage si nécessaire, puis utilisez des utilitaires tels que grep ou vos propres applications PHP pour analyser le fichier journal.

Dans cet article, nous examinerons le profilage. À première vue, le profilage s’apparente au traçage. Le journal de profilage n'est pas destiné aux humains, il n'est pas destiné à visualiser le déroulement d'un programme, mais il nous fournit des données pour l'analyse statistique d'un programme en cours d'exécution.

Création d'un journal de profilage

Vous trouverez ci-dessous un court extrait du journal de profilage généré par xdebug :

fl=php:interne
fn=php :: définir
106 3

Fl=C:\www\drupal\includes\bootstrap.inc
fn=require_once::C:\www\drupal\includes\bootstrap.inc
1 648
cfn=php :: définir
appels=1 0 0
13 6
cfn=php :: définir
appels=1 0 0
18 4
cfn=php :: définir
appels=1 0 0
23 2


Comme vous pouvez le constater, le journal de profilage ne peut pas être lu directement. Nous utiliserons des outils supplémentaires pour visualiser et analyser les données obtenues. Ainsi, le profilage montre combien de fois une ligne particulière a été lancée et combien de temps le lancement a pris.
La création d'un journal de profilage dégrade considérablement les performances, à l'instar de la création d'un journal de trace, car il est nécessaire de décrire le passage de chaque ligne. Par conséquent, tout comme dans le cas du traçage, n'exécutez pas de profilage sur des serveurs de production... Cependant, il existe des cas où le profilage doit être exécuté sur un système actif. Dans ce cas, soyez prudent lorsque vous exécutez xdebug simultanément avec d'autres extensions Zend, telles que des chargeurs, des optimiseurs ou des caches.
Pour que xdebug commence à enregistrer les journaux de profilage, ajoutez

Veuillez noter que vous ne pouvez pas exécuter le profilage au démarrage en exécutant une commande.
Étant donné que le journal de profilage est destiné à être lu par les programmes d'analyse, aucun paramètre supplémentaire ne vous permet d'afficher des informations supplémentaires, comme c'est le cas avec le journal de trace. Cependant, certains paramètres vous permettent de configurer le profilage, similaires à ceux que nous avons utilisés lors de la configuration du traçage.
Premièrement, xdebug écrit le journal de profilage dans le répertoire /tmp par défaut. Si vous utilisez Windows, vous devez corriger php.ini, comme ceci :
xdebug.profiler_output_dir="c:\traces"

Par défaut, xdebug écrase le journal de profilage existant. Vous pouvez le configurer pour compléter celui existant en ajoutant la commande suivante

dans php.ini. Il existe des cas où vous ne souhaitez pas créer un journal de profilage pour tous les fichiers, mais en même temps, l'activation du profilage au moment de l'exécution est problématique. Au lieu d'activer et de désactiver périodiquement le profilage, ajoutez la commande
xdebug.profiler_enable_trigger=Activé

dans php.ini. Vous pouvez désormais activer et désactiver le profilage en transmettant un paramètre spécial GET ou POST XDEBUG_PROFILE à un script PHP. Cela permettra le profilage uniquement pour ce script PHP. Il n'est pas nécessaire de définir la valeur de ce paramètre, pensez simplement à ajouter ce paramètre à l'adresse test.php?XDEBUG_PROFILE.

Nom du journal de profilage

Le nom que xdebug attribue par défaut au journal de profilage est « cachegrind.out ». plus l'identifiant du processus. Tout comme dans le cas du journal de trace, vous pouvez modifier les noms du journal en ajoutant les paramètres appropriés au php.ini. Nom du paramètre xdebug.profiler_output_name. L'argument est une chaîne. qui peut contenir divers modificateurs. Les plus importants sont ci-dessous :

  • %p – identifiant du processus
  • %r – nombre aléatoire
  • %u - heure
  • %H – valeur de $_SERVER["HTTP_HOST"]
  • %R – valeur de $_SERVER["REQUEST_URI"]
  • %s – nom incluant le chemin complet, les barres obliques sont converties en traits de soulignement
Veuillez noter que le modificateur %s n'est utilisé que pour xdebug.profiler_output_name. Si vous souhaitez connaître le nom du journal de profilage, vous pouvez appeler la fonction xdebug_get_profiler_filename().

Analyse du journal de profilage
Comme mentionné ci-dessus, pour analyser le journal de profilage, des programmes supplémentaires de visualisation des données sont nécessaires. Tous les journaux de profilage créés par xdebug sont dans un format similaire au format Cachegrind. Cachegrind est un profileur qui fait partie d'un programme plus puissant appelé Valgrind, un programme de débogage et de profilage de logiciels pour Linux. Cachegrind a été conçu pour analyser les statistiques des caches, de l'utilisation de la mémoire et des commandes du programme. Un autre outil Valgrind, Callgrind, dessine des graphiques d'appels. Concernant PHP, nous pouvons utiliser cette application pour visualiser et analyser le journal de profilage.
L'outil couramment utilisé pour analyser le journal de profilage généré par xdebug s'appelle . KCachegrind est un logiciel libre sous licence GPL (fonctionne uniquement sur les systèmes Unix). Cependant, il existe un programme simple pour Windows, qui est également gratuit. Regardons d'abord la version Windows.

WinCacheGrind : analyse des logs de profilage sous Windows

La version actuelle (au moment de la rédaction par l'auteur de cet article) de WinCachegrind est la 1.0.0.12. Cette version date de 2005, ce qui signifie que WinCachegrind n'a pas été développé depuis longtemps. Si vous regardez les notes de version, les auteurs écrivent que le programme présente des bugs qui le font parfois se comporter étrangement.
Par conséquent, je recommande d'utiliser KCachegrind, lancé sur la base d'une machine virtuelle sur la dernière distribution Linux, par exemple Ubuntu (note du traducteur, d'une manière générale, une recommandation étrange ; dans ce cas, je recommanderais simplement d'installer Linux, et de ne pas s'enfermer le jardin des machines virtuelles). Il existe un grand nombre de machines virtuelles disponibles sous Windows. S'il n'est pas possible d'utiliser Unix ou une machine virtuelle pour une raison quelconque, vous pouvez continuer à utiliser WinCachegrind pour une analyse simple des journaux de profilage. WinCachegrind ne dessine pas de graphiques d'appels, contrairement à KCachegrind.
L'installation de Wincachegrind est extrêmement simple. Exécutez le programme d'installation, cliquez sur le bouton pour accepter la licence et l'installation est terminée. Vous pouvez maintenant exécuter le programme et ouvrir l'un des journaux de profilage cachegrind créés par xdebug.

En cliquant sur l'horloge ou sur l'icône sigma, vous pouvez basculer entre l'affichage des informations en valeurs absolues et en pourcentages. L'affichage en pourcentage indique le temps, en pourcentage du temps total, nécessaire pour appeler une fonction dans un bloc donné.
Deux paramètres utiles sont Profiler -> Masquer les fonctions rapides et Profiler -> Masquer les fonctions de la bibliothèque. Le premier commutateur masque les fonctions dont la contribution temporelle au temps global d'exécution du programme est insignifiante.
Le deuxième paramètre, Profiler -> Masquer les fonctions de la bibliothèque, masque les fonctions intégrées à PHP de l'analyse générale. Lorsque ces deux paramètres sont activés, vous voyez moins de données, ce qui vous permet de vous concentrer sur les zones de votre code qui nécessitent une optimisation.
La fenêtre principale contient deux onglets : Ligne par ligne et Global. Les deux onglets affichent les mêmes informations, mais l'onglet Global regroupe les informations pour une meilleure présentation. Le temps personnel affiche le temps d'exécution du code dans le bloc actuel, tandis que le temps cumulatif (Cum.) affiche le temps d'exécution total des fonctions dans le bloc donné.

KCacheGrind : analyse des logs de profilage sous Unix

La version Unix de KCachegrind offre plus de fonctionnalités que WinCachegrind. KCachegrind visualise les données et crée un graphique d'appels.
Pour commencer à l'utiliser, vous devez installer KCachegrind. Version actuelle . Une version plus récente (0.10.1) est disponible, mais elle fait partie du package Valgrind.
Si possible, utilisez un gestionnaire de packages pour installer le package KCachegrind. KCachegrind utilise GraphViz pour dessiner des graphiques d'appels, vous devez donc également installer le package GraphViz si votre gestionnaire de packages n'installe pas automatiquement les packages dépendants.
Si vous ne trouvez pas le package binaire KCachegrind, vous devrez compiler KCachegrind vous-même. Après avoir téléchargé les sources, exécutez

./configure --prefix=/opt/kde3
faire
faire installer

Comme vous pouvez le constater, vous devez spécifier le chemin d'accès à l'installation actuelle de la bibliothèque KDE. Si vous ne savez pas où se trouvent les bibliothèques KDE sur votre système, utilisez

pour afficher le chemin d'accès aux bibliothèques KDE.
Une fois installé, vous pouvez exécuter KCacheGrind à partir de la ligne de commande

L'affichage tabulaire des données dans KCachegrind est très similaire à WinCachegrind. Vous pouvez également basculer entre les valeurs absolues et en pourcentage. Certaines fonctionnalités de KCachegrind ne sont pas conçues pour PHP. L'image ci-dessous montre le graphique des appels du programme phpMyAdmin :


Comme vous pouvez le constater, la majeure partie du temps de démarrage a été passée dans common.inc.php. La capture d'écran suivante montre une visualisation des appels de fonction dans common.inc.php :

Ce bloc de code exécute deux require_onces, soit la moitié du temps nécessaire pour exécuter common.inc.php. En double-cliquant sur n’importe quel rectangle, vous approfondirez l’analyse des données.

Optimisation du code basée sur les données de profilage

Profilez toujours vos applications avant de les optimiser. Vous pouvez commencer l'optimisation vous-même, là où il vous semble que cette optimisation apportera un effet, mais ce n'est pas toujours vrai. L'optimisation n'a principalement d'effet que sur les parties qui prennent le plus de temps dans le processus d'exécution.
Si vous exécutez plusieurs copies d'un programme en même temps, vous devrez peut-être encore optimiser la partie de votre programme qui prend la majeure partie du temps d'exécution. Dans ce cas, l'optimisation ne permettra pas d'accélérer le traitement d'une requête individuelle, mais permettra à votre serveur de gérer des charges élevées tout en consommant moins de ressources pour répondre à ces requêtes.
Lorsque vous examinez les durées d'exécution du profileur, gardez à l'esprit que les valeurs absolues sont moins importantes que les valeurs relatives. Mesurées sur différents systèmes, les valeurs absolues peuvent varier. Cependant, avant de commencer à optimiser votre code, tenez compte des éléments suivants.
Une règle importante en optimisation consiste à réduire le nombre d’opérations d’E/S. Certaines opérations d'E/S prennent beaucoup de temps par rapport aux calculs. Réduire ces opérations peut être un moyen très efficace d’accélérer votre programme. La suppression d'un appel d'E/S peut apporter une amélioration plus efficace que de passer de nombreuses heures à optimiser le code. Par conséquent, vous devez d’abord vous concentrer sur les opérations d’E/S avant de commencer à coder.
Vous pouvez également augmenter le nombre de vos serveurs avant d'optimiser. Vous pouvez en acheter un énorme, ce qui vous apportera une légère augmentation de productivité. Le temps de développement coûte plus cher que le prix d’un nouveau serveur. Et si vous augmentez la quantité de matériel, vous pouvez être sûr que vous obtiendrez l'augmentation immédiatement sans aucun impact sur le code PHP. Lorsqu'un développeur passe un ou deux jours à optimiser son code, on ne peut jamais savoir dans quelle mesure la productivité va augmenter. Et au final, on ne peut plus être sûr que l’optimisation n’apportera aucune erreur.
La conversion de certaines pages en pages statiques est un moyen d'obtenir de meilleures performances. Disons qu'il existe un site avec beaucoup de trafic, sur lequel un script PHP crée la première page de chaque requête, en sélectionnant des informations dans une base de données ou un fichier XML. Si les données d'une page changent assez fréquemment, vous pouvez en recréer une copie statique. Si la conversion en vue statique n'est pas possible pour une page (certaines informations personnelles sont affichées sur la page), vous pouvez convertir certains blocs en vue statique.
Un autre niveau d'optimisation ne nécessite pas de modifier le code PHP. Comme nous le savons, PHP est un langage interprété. Cela signifie que ses commandes sont traduites au moment de l'exécution en code intermédiaire. La diffusion est répétée à chaque exécution du script. Cela rend PHP plus lent par rapport aux langages comme C ou Java, qui ne nécessitent pas d'analyser le code à chaque fois que vous l'exécutez. Pour PHP, vous pouvez utiliser des caches de représentation intermédiaire (voir ma traduction....) pour sauvegarder et réutiliser le code intermédiaire, cela accélère le démarrage et l'exécution.
Tout cela ne veut pas dire que ce n’est ni le moment ni le lieu d’optimiser le code PHP. Certaines optimisations de code peuvent grandement améliorer les performances. Cependant, n’oubliez jamais que modifier le code comporte toujours le risque d’introduire des bugs supplémentaires et des problèmes de sécurité. N'oubliez pas non plus que l'optimisation de votre code le rend moins lisible.

Conclusion

La création et la visualisation d'un journal de profilage sont l'une des conditions importantes pour optimiser le code PHP. Vous devez savoir quels endroits du programme prennent le plus de temps, et c'est là que vous devriez commencer à optimiser.
Dans le prochain article, nous examinerons le débogage à l'aide de xdebug. xdebug peut vous offrir la possibilité d'effectuer un débogage à distance. En utilisant un client doté de cette fonctionnalité, tel qu'Eclipse PDT, vous pouvez déboguer votre code sans le modifier, définir des points d'arrêt, parcourir des sections de code et voir comment et où les variables changent de valeur.

Dernière mise à jour : 01/12/2019

Parution : 01/09/2016


Grâce à PhpStorm, vous pouvez analyser les performances de votre code PHP en le profilant. Le profilage vous permettra de collecter des statistiques d'exécution du programme : les noms des fonctions exécutées, combien de fois chaque fonction a été exécutée, le temps d'exécution de chaque fonction, quelles autres fonctions ont été appelées au sein de chaque fonction, etc.

Ces informations peuvent vous donner des indications sur les domaines dans lesquels votre code peut être amélioré.

Voyons voir comment ça fonctionne.

1. Conditions préalables

PhpStorm IDE peut utiliser les informations de profilage collectées à l'aide de l'outil Xdebug. Cette extension doit être installée et configurée sur votre système. Pour plus d'informations, consultez le Guide d'installation de Xdebug.

Si vous êtes un utilisateur de la merveilleuse plate-forme de serveur portable et de l'environnement logiciel Open Server, vous n'avez rien à faire - l'extension Xdebug est déjà installée et connectée.

Attention

Xdebug n'est pas compatible avec IonCube. IonCube est un outil (utilitaires) de protection des logiciels écrits dans le langage de programmation PHP. Désactivez complètement l'extension IonCube ou lors de l'utilisation de Xdebug. Un autre problème possible pourrait être que Xdebug est configuré par défaut sur le port 9000, qui est le même port utilisé par Open Server. Pour résoudre ce problème, dans l'un des cas, vous devez modifier le numéro de port.

Toutes les actions décrites ici ont été reproduites avec les résultats attendus corrects dans l'environnement technologique suivant :

2. Activation du profileur Xdebug

Le profilage ajoute une certaine surcharge à l'exécution de l'application et génère une énorme quantité d'informations sur le disque. Par conséquent, il est préférable d'activer le profileur Xdebug uniquement lorsque cela est nécessaire et de le désactiver dans des circonstances normales.

Xdebug est configuré via des directives dans le fichier php.ini actif. Chaque fois que vous activez le profileur, vous devez configurer la directive suivante :

xdebug.profiler_output_dir = /chemin/vers/store/snapshots

La valeur de la directive doit spécifier le chemin qui sera utilisé pour enregistrer les fichiers de profilage.

2.1. À l'échelle mondiale

Pour activer le profileur Xdebug globalement, vous devez utiliser la directive suivante :

xdebug.profiler_enable = 1

De cette façon, le profilage sera effectué à chaque fois qu’un script sera exécuté. Il est pratique d'utiliser cette option pour activer le profileur uniquement dans de rares cas.

2.2. Utilisation d'options d'interprétation supplémentaires

Vous pouvez activer le profileur à l'aide de paramètres d'interpréteur supplémentaires dans la fenêtre Configurations d'exécution/débogage. Pour l'ouvrir, utilisez les éléments suivants dans le menu principal de l'IDE :

L'option (marquée d'un contour rouge dans la capture d'écran ci-dessus) Section Options de l'interprète (options de l'interprète) Ligne de commande (ligne de commande) doit contenir la ligne suivante :

D xdebug.profiler_enable = 1

Cette option vous permettra d'utiliser le profileur pour une configuration spécifique, et non à l'échelle globale.

2.3. Utilisation de paramètres GET/POST spéciaux ou d'un fichier cookie

Pour un profilage plus contrôlé, la directive suivante doit être utilisée :

xdebug.profiler_enable_trigger = 1

Si la valeur de la directive est définie sur 1, alors lors de l'exécution d'un script avec un paramètre GET/POST ou un cookie nommé XDEBUG_PROFILE, le profilage sera effectué quel que soit le paramètre xdebug.profiler_enable.

Cette option pour activer le profileur est la plus populaire.

3. Collecte des journaux de profilage

Pour pouvoir analyser les journaux de profilage, ils doivent d’abord être collectés.

3.1. Collection de journaux de profilage pour les applications Web

Pour profiler des applications Web, utilisez le profileur Xdebug globalement ou démarrez-le et arrêtez-le à la demande. Après avoir activé le profileur, ouvrez l'application dans le navigateur pour commencer à collecter des données - journaux de profilage.

Lors de l'analyse des problèmes de performances, l'utilisation de bookmarklets ou d'extensions de navigateur pour le débogage est une très bonne approche car elle vous permet de naviguer dans l'application et de lancer le profileur uniquement lorsqu'un problème de performances est détecté. Cela vous permet de collecter des journaux de profilage ciblés.

3.2. Collection de journaux de profilage pour les applications CLI et les tests unitaires

Pour profiler les applications CLI et les tests unitaires, utilisez le profileur Xdebug globalement ou créez une configuration d'exécution distincte pour activer le profileur à l'aide de la fenêtre Configurations d'exécution/débogage. Exécutez ensuite l’application CLI ou les tests unitaires pour collecter les données de profilage.

Lors de l'analyse des problèmes de performances dans les tests unitaires, une bonne approche consiste à créer une configuration distincte pour exécuter uniquement les tests unitaires suspectés de rencontrer des problèmes de performances. Cela vous permet de collecter des journaux de profilage ciblés.

4. Analyse de la description du journal de profilage

Examinons de plus près le journal de profilage.

4.1. Ouverture du journal de profilage

Pour ouvrir le journal de profilage, utilisez les éléments suivants dans le menu principal de l'EDI : .

Si vous êtes un utilisateur de la merveilleuse plate-forme de serveur portable Open Server, vous pouvez également utiliser l'outil multiplateforme Webgrind pour afficher le journal de profilage. Il peut être trouvé via les éléments suivants du menu principal d'Open Server [Avancé → Profileur PHP].

Les journaux de profilage sont enregistrés dans un dossier conformément à la directive xdebug.profiler_output_dir configurée. Le nom du fichier généré commence toujours par cachegrind.out. et se termine soit par l'ID du processus PHP ou du serveur Web, soit par le hachage crc32 du répertoire dans lequel se trouve le script profilé.


4.2. Onglet Statistiques d'exécution

Dans l'onglet Statistiques d'exécution, vous pouvez examiner des informations récapitulatives sur les métriques d'exécution de chaque fonction appelée. Vous pouvez voir tous les fichiers, les appels de fonction, combien de fois ils ont été appelés et le temps d'exécution (absolu et relatif) de chaque fonction.

La grille supérieure affiche diverses mesures :

  • Temps personnel - le temps qu'une fonction passe à exécuter son code (sans prendre en compte les appels à d'autres fonctions).

La grille inférieure affiche deux onglets : Appelés - les fonctions que le script appelle ici et Appelants - à partir desquels le script a été appelé. Vous pouvez voir diverses mesures ici :

  • Temps - temps d'exécution total.
  • Appels - nombre d'appels.

Les fonctions avec un temps d'exécution long ou un grand nombre d'appels nécessitent certainement des tests.

4.3. Onglet Arborescence des appels

L'onglet Call Tree affiche les chemins d'exécution de votre code. Ici, vous pouvez voir des informations plus détaillées sur le temps d'exécution de chaque fonction, etc.

La grille supérieure affiche les arborescences d'appels (quelles fonctions sont appelées dans d'autres fonctions) et d'autres métriques :

  • Appelable (fichier appelé) - le fichier qui a été exécuté.
  • Temps - temps d'exécution total.
  • Appels - nombre d'appels.

La grille inférieure affiche deux onglets : Appelés - fonctions appelées ici et Appelants - à partir desquels la fonction est appelée. Vous pouvez voir diverses mesures ici :

  • Callable (fonction appelée) - une fonction qui a été exécutée.
  • Temps - temps d'exécution total.
  • Appels - nombre d'appels.

Questions de contrôle

  1. Pourquoi les applications PHP sont-elles profilées ?
  2. De combien de manières principales existe-t-il pour activer le profileur Xdebug ?
  3. Quelle est la meilleure façon de procéder lors du profilage des applications CLI et des tests unitaires ?
  4. Quels outils peuvent être utilisés pour analyser les journaux de profilage ?
  5. Lors de l’analyse d’un journal de profilage, à quelles mesures devez-vous prêter attention en premier ?

Publications sur le sujet