- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
WP-CLI có lệnh `wp profile` có thể giúp bạn nhanh chóng tìm ra đoạn code nào làm WordPress chạy chậm. Công cụ này hỗ trợ làm việc với xdebug và New Relic bởi lý do nó khá dễ dàng cài đặt trên hosting server có cài đặt WP-CLI.
Với wp profile
cho bạn chi tiết các thành phần load trong wordpress mà ảnh hưởng đến tốc độ wordpress như thời gian thực thi, số lượng truy vấn database, cache hit/miss ratio.. để giúp bạn debug dễ dàng.
Chạy lệnh wp profile stage
để xem thông số tải trang ở từng giai đoạn sử lý code trong WordPress, bạn có thể thêm tham số --url=
nếu muốn tùy biến quét URL.
$ wp profile stage --url=yourdomain.com +------------+---------+------------+-------------+-------------+------------+--------------+-----------+------------+--------------+---------------+ | stage | time | query_time | query_count | cache_ratio | cache_hits | cache_misses | hook_time | hook_count | request_time | request_count | +------------+---------+------------+-------------+-------------+------------+--------------+-----------+------------+--------------+---------------+ | bootstrap | 0.7597s | 0.0052s | 14 | 93.21% | 357 | 26 | 0.3328s | 2717 | 0s | 0 | | main_query | 0.0131s | 0.0004s | 3 | 94.29% | 33 | 2 | 0.0065s | 78 | 0s | 0 | | template | 0.7041s | 0.0192s | 147 | 92.16% | 2350 | 200 | 0.6982s | 6130 | 0s | 0 | +------------+---------+------------+-------------+-------------+------------+--------------+-----------+------------+--------------+---------------+ | total (3) | 1.477s | 0.0248s | 164 | 93.22% | 2740 | 228 | 1.0375s | 8925 | 0s | 0 | +------------+---------+------------+-------------+-------------+------------+--------------+-----------+------------+--------------+---------------+
Khi wordpress site sử lý các request từ trình duyệt, bản chất nó đang thực thi các mã PHP script. Lệnh này chia làm 3 giai đoạn:
- bootstrap sử lý nạp plugins, theme và các hook ban đầu (init)
- main_query sử lý WP_Query chính
- template Phát hiện những template trong theme được gọi dựa trên query chính và render nó.
Trong ví dụ trên, chúng ta thấy stage `bootstrap` dường như chạy hơi chậm, chúng ta sẽ đi phân tích sâu ở stage này. Lệnh wp profile stage bootstrap
sẽ phân tích chi tiết những gì đang sảy ra ở giai đoạn bootstrap.
$ wp profile stage bootstrap --url=runcommand.io --spotlight +--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+ | hook | callback_count | time | query_time | query_count | cache_ratio | cache_hits | cache_misses | request_time | request_count | +--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+ | muplugins_loaded:before | | 0.1644s | 0.0017s | 1 | 40% | 2 | 3 | 0s | 0 | | muplugins_loaded | 2 | 0.0005s | 0s | 0 | 50% | 1 | 1 | 0s | 0 | | plugins_loaded:before | | 0.1771s | 0.0008s | 6 | 77.63% | 59 | 17 | 0s | 0 | | plugins_loaded | 14 | 0.0887s | 0s | 0 | 100% | 104 | 0 | 0s | 0 | | after_setup_theme:before | | 0.043s | 0s | 0 | 100% | 26 | 0 | 0s | 0 | | init | 82 | 0.1569s | 0.0018s | 7 | 96.88% | 155 | 5 | 0s | 0 | | wp_loaded:after | | 0.027s | 0s | 0 | | 0 | 0 | 0s | 0 | +--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+ | total (7) | 98 | 0.6575s | 0.0043s | 14 | 77.42% | 347 | 26 | 0s | 0 | +--------------------------+----------------+---------+------------+-------------+-------------+------------+--------------+--------------+---------------+
Ở mỗi stage sẽ có những actions khác nhau, ví dụ với bootstrap, bạn có thể thấy một vài actions như ‘plugins_loaded:before’ & ‘wp_loaded:after’. Các actions tương ứng với hành động before, after trong wordpress hooks.
Khi bạn tìm ra hook nào là yếu tố tác động đến tối ưu tốc độ wordpress, tức làm wordpress chạy chậm, có thể sử dụng tiếp lệnh sau với hook. Nhớ thêm tham số --fields=
để lọc hiển thị các trường.
$ wp profile hook plugins_loaded --url=runcommand.io --fields=callback,time,location +------------------------------------------------------------+---------+-----------------------------------------------------------------+ | callback | time | location | +------------------------------------------------------------+---------+-----------------------------------------------------------------+ | wp_maybe_load_widgets() | 0.0046s | wp-includes/functions.php:3501 | | wp_maybe_load_embeds() | 0.0003s | wp-includes/embed.php:162 | | VaultPress_Hotfixes->protect_jetpack_402_from_oembed_xss() | 0s | vaultpress/class.vaultpress-hotfixes.php:124 | | _wp_customize_include() | 0s | wp-includes/theme.php:2052 | | EasyRecipePlus->pluginsLoaded() | 0.0013s | easyrecipeplus/lib/EasyRecipePlus.php:125 | | Gamajo\GenesisHeaderNav\genesis_header_nav_i18n() | 0.0007s | genesis-header-nav/genesis-header-nav.php:61 | | DS_Public_Post_Preview::init() | 0.0001s | public-post-preview/public-post-preview.php:52 | | wpseo_load_textdomain() | 0.0004s | wordpress-seo-premium/wp-seo-main.php:222 | | load_yoast_notifications() | 0.0016s | wordpress-seo-premium/wp-seo-main.php:381 | | wpseo_init() | 0.0329s | wordpress-seo-premium/wp-seo-main.php:240 | | wpseo_premium_init() | 0.0019s | wordpress-seo-premium/wp-seo-premium.php:79 | | wpseo_frontend_init() | 0.0007s | wordpress-seo-premium/wp-seo-main.php:274 | | Black_Studio_TinyMCE_Plugin->load_compatibility() | 0.0016s | black-studio-tinymce-widget/black-studio-tinymce-widget.php:206 | | Jetpack::load_modules() | 0.0564s | jetpack/class.jetpack.php:1672 | +------------------------------------------------------------+---------+-----------------------------------------------------------------+ | total (14) | 0.1026s | | +------------------------------------------------------------+---------+-----------------------------------------------------------------+
Oh, tôi đã tìm ra nguyên nhân! Do hàm wpseo_init()
và Jetpack::load_modules()
sử lý mất ~100ms ở mỗi trang được nạp.
Với tiện ích wp profile
, bạn dễ dàng khám phá bên trong WordPress để trả lời câu hỏi tại sao WordPress của bạn chạy chậm ?
Chúc các bạn thành công!
Nếu bạn thích bài viết này, hãy ủng hộ chúng tôi bằng cách đăng ký nhận bài viết mới ở bên dưới và đừng quên chia sẻ kiến thức này với bạn bè của bạn nhé. Bạn cũng có thể theo dõi blog này trên Twitter và Facebook
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype