WordPressのボトルネック解消と学習のためのプラグイン(Prime Timeline)

WordPressの開発者向けです。ちょっと前ですが、WordPressのランタイムプロファイラを作成しましたので紹介します。

timeline

https://github.com/prime-strategy/prime-timeline

ランタイムプロファイラというのは、WordPressの実行時の性能解析を行うツールです。WordPressの実行時にボトルネックとなっている箇所を特定するために作成しましたが、学習用途としてもおすすめです。

プラグインとしてインストールすると、ログイン中、画面上部のツールバーに「Prime Timeline」というメニューが出現します。クリックするとそのページのプロファイル情報をタイムライン(時系列)で表示します。

一番簡単な使い方

キャプチャの様に、

(1)性能測定したいページ(管理画面も可)を表示させて、ツールバーの「Pirme Timeline」をクリックします。

(2)右上部のテキストボックスに実行時間(ミリ秒単位)を入力します。キャプチャの例では、20ミリ秒(0.02秒)を指定しています。

(3)テキストボックス左の「Slow Points」をクリックします。

そうすると、実行時間として20ミリ秒(0.02秒)以上かかっている箇所が表示されます。お使いの環境によって、この数値は増減させてください。私はだいたい最初に50ミリ秒(0.05秒)くらいの指定を入れます。これで、一発でボトルネックとなっている箇所が表示されます。

上部メニュー

プロフィル情報として何を表示させるかを選択するメニューです。+-はプロファイル項目の追加削除です。

All Timeline => すべてのタイムライン情報

LoadedFiles => ロードされたファイル(最初にロードされたタイミング)

SQL Queruies => MySQLに発行されたクエリ情報

All Hooks => 通過したすべてのフック情報

Register Hooks => コールバックが登録されていて発火したフック情報

Passed Hooks => コールバックが登録されていないが通過したフック情報

Slow Points => ボトルネックの箇所の一覧

Total excution time はすべての実行時間です。ただ、内部的に計測した時間なので、実行内容によって実際の時間の1.2~5倍くらいの時間になります。これは、Slow Pointsで指定する時間そのたの測定時間にも影響しますので、実際にはそこまでかかっていません。ただ、相対的に何処に時間が掛かっているかを直感的に知るには便利です。

表の項目

以下の通りです。

No. => 測定した項目のID(オートインクリメント)

Total(msec) => 測定開始からの合計経過時間

Type => 項目タイプ。SQL、ファイル、アクションフックとフィルターフックの場合は、フックを発火させる関数名(apply_filtersとかdo_actionなどのこと)。

File => ロードされたファイル名(アスタリスクは発火したフック)

Hook/SQL => フック名または実行されたSQL

Detail => 詳細情報。フックの場合は、コールバックが実行された場合は、その内容と優先順位、回数、フックの配置された具体的なファイルと行数など。SQLの場合は、バックトレース情報。

Count => 実行された合計回数。ここ結構重要です。特に同じフックが発火した回数を見て1000回以上などの異常値がある場合、見直すとパフォーマンスが上がります。

Diff(msec) => 直前の測定項目の測定時から現在の項目の測定直前までにどれくらの時間がかかったか。ここの時間がかかっている場合は、この項目ではなくこの直前の処理に問題があります。

This(msec) => この項目自体が開始してから完了するまでの合計時間(合計というのは何度も繰り返される場合があるからです)。ここが大きい場合はこの項目自体に問題があります。たとえば、回数が多すぎるなど。ただし、ここは、フックが入れ子になっている場合などは、それを考慮する必要があります。つまり、フックの実行時間は、その中のフックの実行時間も含んでいます。

なお、各行に割り当てられるNo.(ID)は当該項目の初回の実行時に割り当てられますので、ご注意ください。たとえば、100回実行される同じフックに対して割り当てられるNo.(ID)は一つです。ですので、Diff(msec)も初回実行時を基準に算定しています。

その他

(1)問題解決時ではなく、いつも見ていると、WordPressの動作原理がよくわかりますので、学習用途に利用いただけます。

(2)このプラグインのソースコードを読むとWordPressの動作原理の勉強になります。

注意点

(1)プラグインとして作成してありますが、まだWordPress公式ディレクトリにアップしていません。github上にありますので、その点ご容赦ください。

(2)現状ではすべてのページで動作します。設定画面での設定はまだ実装していませんので、学習用途以外ではプロファイル時のみに動作させてください。ログインしていないユーザーにはあまり影響しませんが、ログインユーザーの動作は重くなります。

(3)問題解決にも学習にも最低限、PHPとMySQLの基礎知識が必要です。

(4)CSSがちょっとアレなのとjQueryの環境によっては、表示が微妙です。だれか見てくれると嬉しいです。

(5)うまく動かなくて、管理画面にログインできなくなってしまった場合は、プラグインディレクトリごと削除してください。あまりそういうことはありませんが、すごく重いサイトとかリソース的に厳しいサーバで有効化すると、タイムアウトとかメモリ使いすぎてエラーになるかもしれません。

それでは、よいWordPressライフを!

“WordPressのボトルネック解消と学習のためのプラグイン(Prime Timeline)” への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です