Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
36
Help us understand the problem. What is going on with this article?
@wokamoto

[WordPress] 負荷がかかっている処理を見つけるのに wp profile がとても便利だった

More than 1 year has passed since last update.

@motchi0214 に教えてもらったんだけど、パフォーマンス調査用に WP-CLI チームが作って公開しているサブコマンド wp profile がとても便利です。
Figure out why WordPress is slow with wp profile
wp-cli/profile-command

これ使うと、ドリルダウンしていって処理に時間がかかっているところを特定できます。

導入方法

wp-cli 入ってること前提、これ書いてる時点での僕の環境では wp-cli のバージョンは 1.5.0。
導入は簡単、GitHub の README.md に書いてある通り、以下のコマンド実行するだけ。

$ wp package install git@github.com:wp-cli/profile-command.git
Installing package wp-cli/profile-command (dev-master)
Updating /home/ec2-user/.wp-cli/packages/composer.json to require the package...
Registering git@github.com:wp-cli/profile-command.git as a VCS repository...
Using Composer to install the package...
---
Loading composer repositories with package information
Updating dependencies
Resolving dependencies through SAT
Dependency resolution completed in 0.212 seconds
Analyzed 5353 packages to resolve dependencies
Analyzed 311432 rules to resolve dependencies
Package operations: 1 install, 0 updates, 0 removals
Installs: wp-cli/profile-command:dev-master efb296b
 - Installing wp-cli/profile-command (dev-master efb296b)
Writing lock file
Generating autoload files
---
Success: Package installed.

使い方

これもシンプル、大枠から見ていってドリルダウンしていく感じで。

まず、全体の処理時間確認

$ wp profile stage --fields=stage,time,cache_ratio
+------------+---------+-------------+
| stage      | time    | cache_ratio |
+------------+---------+-------------+
| bootstrap  | 0.3982s | 99.79%      |
| main_query | 0.0074s | 99.29%      |
| template   | 0.1109s | 99.82%      |
+------------+---------+-------------+
| total (3)  | 0.5165s | 99.63%      |
+------------+---------+-------------+

bootstrap が時間かかってるみたいですね、bootstrap のどこが具体的に時間かかってるんだろう?

$ wp profile stage bootstrap --fields=hook,callback_count,time,cache_ratio --spotlight
+--------------------------+----------------+---------+-------------+
| hook                     | callback_count | time    | cache_ratio |
+--------------------------+----------------+---------+-------------+
| muplugins_loaded:before  |                | 0.1122s | 100%        |
| plugins_loaded:before    |                | 0.1557s | 99.31%      |
| plugins_loaded           | 30             | 0.0616s | 100%        |
| after_setup_theme:before |                | 0.0134s | 100%        |
| init                     | 50             | 0.0241s | 100%        |
| wp_loaded:after          |                | 0.0292s |             |
+--------------------------+----------------+---------+-------------+
| total (6)                | 80             | 0.3961s | 99.86%      |
+--------------------------+----------------+---------+-------------+

plugins_loaded hook を深掘りしてみるか

$ wp profile hook plugins_loaded --fields=callback,location,time --order=DESC --orderby=time
+------------------------------------------------------------------+-------------------------------------------------------------------+---------+
| callback                                                         | location                                                          | time    |
+------------------------------------------------------------------+-------------------------------------------------------------------+---------+
| Jetpack::load_modules()                                          | jetpack/class.jetpack.php:1749                                    | 0.0268s |
| Jetpack_Sync_Actions::init()                                     | jetpack/sync/class.jetpack-sync-actions.php:17                    | 0.0109s |
| Jetpack::plugin_textdomain()                                     | jetpack/class.jetpack.php:928                                     | 0.0093s |
| wpcf7()                                                          | contact-form-7/settings.php:89                                    | 0.0069s |
| wp_maybe_load_widgets()                                          | wp-includes/functions.php:3681                                    | 0.0042s |
| LogBook\plugins_loaded()                                         | logbook/logbook.php:23                                            | 0.0017s |
| Jetpack->check_twitter_tags()                                    | jetpack/class.jetpack.php:1997                                    | 0.0005s |
| TotalHacks->plugins_loaded()                                     | wp-total-hacks/wp-total-hacks.php:125                             | 0.0004s |
| BA_Edit_Author_Slug->load_textdomain()                           | edit-author-slug/includes/classes/class-edit-author-slug.php:330  | 0.0003s |
| NginxChampuru->plugins_loaded()                                  | nginx-champuru/nginx-champuru.php:129                             | 0.0002s |
| gist->plugins_loaded()                                           | oembed-gist/oembed-gist.php:25                                    | 0.0002s |
| function(){}                                                     | mu-plugins/cloudfront-fix.php:2                                   | 0.0002s |
| wp_maybe_load_embeds()                                           | wp-includes/embed.php:176                                         | 0.0001s |
| geoip_detect_load_textdomain()                                   | geoip-detect/init.php:25                                          | 0.0001s |
| Jetpack->extra_oembed_providers()                                | jetpack/class.jetpack.php:1728                                    | 0.0001s |
| Jetpack_Sync_Actions::initialize_woocommerce()                   | jetpack/sync/class.jetpack-sync-actions.php:295                   | 0.0001s |
| Amazonpolly_I18n->load_plugin_textdomain()                       | amazon-polly/includes/class-amazonpolly-i18n.php:34               | 0.0001s |
| Jetpack_Sync_Actions::initialize_wp_super_cache()                | jetpack/sync/class.jetpack-sync-actions.php:308                   | 0s      |
| function(){}                                                     | hacks/hacks.php:255                                               | 0s      |
| geoip_detect_defines()                                           | geoip-detect/init.php:2                                           | 0s      |
| _wp_customize_include()                                          | wp-includes/theme.php:2772                                        | 0s      |
| geoip_detect_maybe_upgrade_version()                             | geoip-detect/upgrade-plugin.php:73                                | 0s      |
| NginxChampuru_Caching->wp_cron_caching()                         | nginx-champuru/includes/caching.class.php:99                      | 0s      |
| Jetpack->check_rest_api_compat()                                 | jetpack/class.jetpack.php:1844                                    | 0s      |
| mycategoryorder_init()                                           | my-category-order/mycategoryorder.php:12                          | 0s      |
| function(){}                                                     | c3-cloudfront-clear-cache/module/model/fixtures/avoid_preview_cac | 0s      |
|                                                                  | he.php:12                                                         |         |
| YellowTree\GeoipDetect\DataSources\Auto\AutoDataSource->on_plugi | geoip-detect/data-sources/auto.php:72                             | 0s      |
| ns_loaded()                                                      |                                                                   |         |
| Jetpack_3rd_Party_Domain_Mapping->attempt_to_hook_domain_mapping | jetpack/3rd-party/domain-mapping.php:41                           | 0s      |
| _plugins()                                                       |                                                                   |         |
| Nginx_Mobile_Theme->plugins_loaded()                             | nginx-mobile-theme/nginx-mobile-theme.php:48                      | 0s      |
| function(){}                                                     | hacks/hacks.php:23                                                | 0s      |
+------------------------------------------------------------------+-------------------------------------------------------------------+---------+
| total (30)                                                       |                                                                   | 0.0622s |
+------------------------------------------------------------------+-------------------------------------------------------------------+---------+
36
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
wokamoto
digitalcubeinc
デジタルキューブは AWS Partner Network (APN) アドバンスドテクノロジーパートナーです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
36
Help us understand the problem. What is going on with this article?