ウェブサイトの表示速度はユーザー体験や SEO に大きく影響します。特に WordPress サイトでは、プラグインやテーマの影響でページの読み込みが遅くなることがあります。

そこで、今回は WordPress がリクエストを受け取ってからHTMLを出力するまでの時間を計測し、どの程度の処理時間がかかっているのかを確認する方法をご紹介します。

LINE着せかえ「回るお寿司」販売中!

処理速度を計測する方法

WordPress の読み込み開始時間を記録し、HTML の出力が完了した時に差分を計算することで処理時間を計測します。開始時間の記録と、完了時の差分の算出にはアクションフックを活用します。

functions.php で計測する方法(お手軽版)

functions.phpを使って処理時間を計測するには、以下のコードを追加します。

// ページの開始時間を記録
add_action('after_setup_theme', function () {
  global $load_start_time;
  $load_start_time = microtime(true);
}, 0);

// ページの表示時間を計測してコメントとして出力
add_action('shutdown', function () {
  global $load_start_time;
  // 管理画面でコメントが出力されると不具合が起きるのでサイト表示側だけに限定
  if(is_home() || is_single() || is_page() || is_archive() || is_search()) {
    $load_time = microtime(true) - $load_start_time;
    echo "\n<!-- page generated in " . round($load_time, 5) . " seconds. -->";
  }
}, 999);

すると、以下のように HTML ソースの最後に、出力にかかった時間が表示されます。

<!-- page generated in 0.1831 seconds. -->

ただし、functions.phpで使用できるアクションフックの中では最も実行順が早いafter_setup_themeより前にも、WordPress 内ではさまざまな処理が行われています。そのため、もっと厳密に計測したい場合は、mu-plugins を使用します。

mu-plugins で計測する方法(厳密版)

functions.phpでの計測よりも厳密に行いたい場合は、mu-plugins を使用します(mu-plugins については、こちらの記事で解説しているので、よかったらご参照ください)。

wp-content/mu-plugins フォルダ(ない場合は作成します)に、measure_output_time.phpなど、わかりやすい名前を付けたファイルを作成し、以下のコードを記述して保存します。

<?php

// ページの開始時間を記録
add_action('muplugins_loaded', function () {
  global $load_start_time;
  $load_start_time = microtime(true);
}, 0);

// ページの表示時間を計測してコメントとして出力
add_action('shutdown', function () {
  global $load_start_time;
  // 管理画面でコメントが出力されると不具合が起きるのでサイト表示側だけに限定
  if(is_home() || is_single() || is_page() || is_archive() || is_search()) {
    $load_time = microtime(true) - $load_start_time;
    echo "\n<!-- page generated in " . round($load_time, 5) . " seconds. -->";
  }
}, 999);

すると、以下のように HTML ソースの最後に、出力にかかった時間が表示されます。

<!-- page generated in 0.28388 seconds. -->

functions.phpで計測した時よりも、時間が少し長くなっているのがわかりますね。muplugins_loadedは、WordPress のアクションフックの中では最も実行順が早いため、より正確な処理時間を計測することができます。

さらに細かく計測したい場合

shutdown以外のアクションフックを使用することで、プラグインの読み込み完了までにかかった時間や、すべてのバックエンドプログラムの読み込み完了までにかかった時間なども測定することができます。

<?php

// ページの開始時間を記録
add_action('muplugins_loaded', function () {
  global $load_start_time, $load_time_message;
  $load_start_time = microtime(true);
}, 0);

// プラグインの読み込みが完了した時
add_action('plugins_loaded', function () {
  global $load_start_time, $load_time_message;
  $load_time = microtime(true) - $load_start_time;
  $load_time_message .= "\n<!-- plugins loaded in " . round($load_time, 5) . " seconds. -->";
}, 999);

// プラグインやテーマなど、すべてのバックエンドプログラムの読み込みが完了した時
add_action('wp_loaded', function () {
  global $load_start_time, $load_time_message;
  $load_time = microtime(true) - $load_start_time;
  $load_time_message .= "\n<!-- wp loaded in " . round($load_time, 5) . " seconds. -->";
}, 999);

// ページの表示時間を計測してコメントとして出力
add_action('shutdown', function () {
  global $load_start_time, $load_time_message;
  // 管理画面でコメントが出力されると不具合が起きるのでサイト表示側だけに限定
  if(is_home() || is_single() || is_page() || is_archive() || is_search()) {
    $load_time = microtime(true) - $load_start_time;
    $load_time_message .= "\n<!-- page generated in " . round($load_time, 5) . " seconds. -->";
    echo $load_time_message;
  }
}, 999);

出力結果は以下のようになります。

<!-- plugins loaded in 0.08984 seconds. -->
<!-- wp loaded in 0.17197 seconds. -->
<!-- page generated in 0.27967 seconds. -->

これは、サイトのパフォーマンスに問題があった場合、どこにボトルネックがあるのかを特定するのに役立ちます。

終わりに

この方法を使うと、テーマやプラグインがどれくらい処理時間を増加させているかを簡単にチェックできます。処理時間が長い場合は、不要なプラグインを無効化したり、キャッシュを導入したりして、WordPress の最適化を試みると良いでしょう。

参考

タグ: ,