La commande wp profile
est un peu comme une alternative à New Relic, capable d’identifier précisément quels composants ralentissent votre site WordPress. Initialement disponible en tant que package premium via runcommand, il est désormais gratuit sur GitHub.
Si vous cherchez un hébergeur compatible avec l’installation de wp profile
, jetez un œil à Kinsta et FastNyx.
J’utilise régulièrement wp profile
pour diagnostiquer les problèmes de performance chez mes clients sur Codeable. Tous les développeurs WordPress devraient s’en servir ! Après avoir suivi ce guide, vous serez plus proche de la résolution de la lenteur de votre site WordPress.
Installation du package wp-profile
Lancez cette commande pour installer wp profile
:
wp package install wp-cli/profile-command
Vous devriez voir que le processus s’est déroulé avec succès et que la commande wp profile
est maintenant disponible:
Updating /root/.wp-cli/packages/composer.json to require the package...
Using Composer to install the package...
---
Loading composer repositories with package information
Updating dependencies
Resolving dependencies through SAT
Dependency resolution completed in 0.120 seconds
Analyzed 3696 packages to resolve dependencies
Analyzed 101022 rules to resolve dependencies
Package operations: 1 install, 0 updates, 0 removals
Installs: wp-cli/profile-command:dev-master ef44df5
- Installing wp-cli/profile-command (dev-master ef44df5)
Writing lock file
Generating autoload files
---
Success: Package installed.
Code language: JavaScript (javascript)
Si vous voyez une erreur concernant composer.json
reverté, l’augmentation de la mémoire devrait résoudre ce problème.
Mettre à jour wp profile
Pour mettre à jour le package profile à la dernière version :
wp package update --allow-root
Utilisation de la commande wp profile
Placez-vous dans le dossier de votre installation WordPress (ou utilisez l’option --path
à la fin de votre commande WP-CLI).
La commande wp profile
peut donner des résultats variables : il est recommandé de la lancer plusieurs fois lors de vos benchmarks.
Commande wp profile stage
Cette commande affiche les différentes étapes du chargement de WordPress :
wp profile stage --allow-root
Vous obtiendrez un tableau détaillé. Concentrez-vous principalement sur la colonne time
.
En général, vous souhaitez que votre cache_ratio
soit élevé (plus de 70 %), que vos cache_hits
dépassent les cache_misses
, et que votre query_time
reste faible.
Exemple de sortie :
+------------+---------+------------+-------------+-------------+------------+--------------+-----------+------------+--------------+---------------+
| stage | time | query_time | query_count | cache_ratio | cache_hits | cache_misses | hook_time | hook_count | request_time | request_count |
+------------+---------+------------+-------------+-------------+------------+--------------+-----------+------------+--------------+---------------+
| bootstrap | 0.8193s | 0.004s | 28 | 92.7% | 559 | 44 | 0.1279s | 2972 | 0s | 0 |
| main_query | 0.0136s | 0.0039s | 7 | 87.25% | 130 | 19 | 0.0042s | 219 | 0s | 0 |
| template | 0.2741s | 0.011s | 30 | 96.94% | 2442 | 77 | 0.2334s | 7030 | 0s | 0 |
+------------+---------+------------+-------------+-------------+------------+--------------+-----------+------------+--------------+---------------+
| total (3) | 1.107s | 0.0189s | 65 | 92.3% | 3131 | 140 | 0.3654s | 10221 | 0s | 0 |
+------------+---------+------------+-------------+-------------+------------+--------------+-----------+------------+--------------+---------------+
Vous pouvez approfondir chaque étape, par exemple pour bootstrap
:
wp profile stage bootstrap --allow-root
Vous verrez alors les hooks utilisés à cette étape, avec leur temps d’exécution, le nombre de requêtes SQL, le ratio de cache, etc:
+--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+
| hook | callback_count | time | query_time | query_count | cache_ratio | cache_hits | cache_misses | request_time | request_count |
+--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+
| muplugins_loaded:before | | 0.3076s | 0.0015s | 4 | 76.47% | 39 | 12 | 0s | 0 |
| muplugins_loaded | 2 | 0.0002s | 0s | 0 | 100% | 2 | 0 | 0s | 0 |
| plugins_loaded:before | | 0.1897s | 0.003s | 12 | 93.28% | 222 | 16 | 0s | 0 |
| plugins_loaded | 33 | 0.0354s | 0s | 0 | 100% | 44 | 0 | 0s | 0 |
| setup_theme:before | | 0.0003s | 0s | 0 | 100% | 4 | 0 | 0s | 0 |
| setup_theme | 1 | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| after_setup_theme:before | | 0.0149s | 0s | 0 | 100% | 40 | 0 | 0s | 0 |
| after_setup_theme | 20 | 0.0068s | 0s | 0 | 100% | 20 | 0 | 0s | 0 |
| init:before | | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| init | 55 | 0.0261s | 0.0009s | 12 | 92.08% | 186 | 16 | 0s | 0 |
| wp_loaded:before | | 0.0001s | 0s | 0 | 100% | 2 | 0 | 0s | 0 |
| wp_loaded | 8 | 0.0001s | 0s | 0 | | 0 | 0 | 0s | 0 |
| wp_loaded:after | | 0.0265s | 0s | 0 | | 0 | 0 | 0s | 0 |
+--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+
| total (13) | 119 | 0.6078s | 0.0054s | 28 | 95.76% | 559 | 44 | 0s | 0 |
+--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+
Pour afficher tous les hooks de chaque étape, utilisez :
wp profile stage --all --orderby=time --allow-root
Cela affiche tous les hooks triés par temps d’exécution :
+--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+
| hook | callback_count | time | query_time | query_count | cache_ratio | cache_hits | cache_misses | request_time | request_count |
+--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+
| muplugins_loaded:before | | 0.178s | 0.0009s | 1 | 25% | 1 | 3 | 0s | 0 |
| muplugins_loaded | 2 | 0.0003s | 0s | 0 | 50% | 1 | 1 | 0s | 0 |
| plugins_loaded:before | | 0.2855s | 0.0041s | 19 | 83.95% | 136 | 26 | 0s | 0 |
| plugins_loaded | 34 | 0.2442s | 0.0009s | 3 | 98.31% | 116 | 2 | 0s | 0 |
| setup_theme:before | | 0.0005s | 0s | 0 | 100% | 4 | 0 | 0s | 0 |
| setup_theme | 1 | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| after_setup_theme:before | | 0.2653s | 0.0011s | 3 | 99.68% | 615 | 2 | 0s | 0 |
| after_setup_theme | 17 | 0.0241s | 0.0002s | 1 | 98.8% | 82 | 1 | 0s | 0 |
| init:before | | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| init | 82 | 0.261s | 0.0016s | 9 | 98.74% | 703 | 9 | 0s | 0 |
| wp_loaded:before | | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| wp_loaded | 7 | 0.0012s | 0s | 0 | 100% | 6 | 0 | 0s | 0 |
| parse_request:before | | 0.0192s | 0s | 0 | 100% | 14 | 0 | 0s | 0 |
| parse_request | 2 | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| send_headers:before | | 0.0001s | 0s | 0 | 100% | 4 | 0 | 0s | 0 |
| send_headers | 0 | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| pre_get_posts:before | | 0.0003s | 0s | 0 | 100% | 10 | 0 | 0s | 0 |
| pre_get_posts | 8 | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| the_posts:before | | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| the_posts | 2 | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| wp:before | | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| wp | 10 | 0.068s | 0.0148s | 30 | 97.3% | 756 | 21 | 0s | 0 |
| template_redirect:before | | 0.0005s | 0s | 0 | | 0 | 0 | 0s | 0 |
| template_redirect | 20 | 0.0098s | 0.0005s | 1 | 99.06% | 105 | 1 | 0s | 0 |
| template_include:before | | 0.0004s | 0s | 0 | 100% | 9 | 0 | 0s | 0 |
| template_include | 1 | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| wp_head:before | | 0.0028s | 0.0003s | 2 | 85.71% | 18 | 3 | 0s | 0 |
| wp_head | 42 | 0.0887s | 0.004s | 9 | 97.85% | 682 | 15 | 0s | 0 |
| loop_start:before | | 0s | 0s | 0 | | 0 | 0 | 0s | 0 |
| wp_footer | 14 | 0.0068s | 0s | 0 | 100% | 61 | 0 | 0s | 0 |
| wp_footer:after | | 0.0002s | 0s | 0 | | 0 | 0 | 0s | 0 |
+--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+
| total (31) | 242 | 1.4571s | 0.0284s | 78 | 90.8% | 3323 | 84 | 0s | 0 |
+--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+
Pour une lecture plus claire, filtrez les valeurs nulles avec :
wp profile stage --all --spotlight --orderby=time --allow-root
C’est beaucoup plus lisible maintenant 🙂
+--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+
| hook | callback_count | time | query_time | query_count | cache_ratio | cache_hits | cache_misses | request_time | request_count |
+--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+
| muplugins_loaded:before | | 0.2969s | 0.0016s | 1 | 25% | 1 | 3 | 0s | 0 |
| muplugins_loaded | 2 | 0.0002s | 0s | 0 | 50% | 1 | 1 | 0s | 0 |
| plugins_loaded:before | | 0.2374s | 0.0021s | 19 | 83.95% | 136 | 26 | 0s | 0 |
| plugins_loaded | 34 | 0.2094s | 0.0004s | 3 | 98.31% | 116 | 2 | 0s | 0 |
| after_setup_theme:before | | 0.1991s | 0.0006s | 3 | 99.68% | 615 | 2 | 0s | 0 |
| after_setup_theme | 17 | 0.0299s | 0.0002s | 1 | 98.8% | 82 | 1 | 0s | 0 |
| init | 82 | 0.3435s | 0.001s | 9 | 98.74% | 703 | 9 | 0s | 0 |
| parse_request:before | | 0.0274s | 0s | 0 | 100% | 14 | 0 | 0s | 0 |
| wp | 10 | 0.0747s | 0.0078s | 30 | 97.3% | 756 | 21 | 0s | 0 |
| template_redirect | 20 | 0.0102s | 0.0002s | 1 | 99.06% | 105 | 1 | 0s | 0 |
| wp_head:before | | 0.0039s | 0.0004s | 2 | 85.71% | 18 | 3 | 0s | 0 |
| wp_head | 42 | 0.0884s | 0.0021s | 9 | 97.85% | 682 | 15 | 0s | 0 |
+--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+
Commande wp profile hook
Vous pouvez également examiner les hooks pour voir lesquels consomment le plus de temps.
wp profile hook --allow-root
Vous pouvez ordonner par temps d’exécution :
wp profile hook --orderby=time --allow-root
Ou n’afficher que les hooks les plus lents :
wp profile hook --spotlight --orderby=time --allow-root
Cela vous donne un aperçu rapide des hooks qui prennent le plus de temps à s’exécuter.
Commande wp profile plugin
Vous pouvez voir quels plugins prennent le plus de temps à se charger.
wp profile plugin --allow-root
Ou trier par temps :
wp profile plugin --orderby=time --allow-root
Ou n’afficher que les plugins les plus lents :
wp profile plugin --spotlight --orderby=time --allow-root
Cela vous permet de repérer rapidement les plugins qui ralentissent votre site WordPress.
Commande wp profile theme
Vous pouvez également voir combien de temps votre thème WordPress prend à se charger.
wp profile theme --allow-root
Commande wp profile list
Vous pouvez voir toutes les commandes disponibles dans le package profile avec :
wp profile list
Code language: PHP (php)
Conclusion
La commande wp profile
est un outil extrêmement utile pour diagnostiquer les problèmes de performance de WordPress. Elle vous permet d’identifier rapidement les plugins, thèmes ou hooks qui ralentissent votre site. Vous pouvez alors prendre des mesures ciblées pour améliorer la vitesse de votre site, comme désactiver ou remplacer les composants problématiques, ou optimiser leur code.
Si vous souhaitez une aide professionnelle pour diagnostiquer et résoudre les problèmes de performance de votre site WordPress, vous pouvez me contacter via Codeable.
Besoin d’un partenaire fiable pour votre projet WordPress/WooCommerce ? Je mets mon expertise à votre service pour des résultats concrets.