過去にも何度かパフォーマンスチューニングを施してきたウチのサイトですが、まだまだトップページの表示が遅い。
ひょっとすると query 数が多いんじゃないか?とは思っていたのだが、あらためて他の WordPress で作成されたサイトと比較してみると、ウチのサイトは明らかに query 数が多い。
SAKURA のレンタルサーバでは、 MySQL サーバと Apache サーバが別のサーバなので、query 数が多いのは、パフォーマンス的に不利だ。
(参照:WordPressの不要なプラグインを外してチューニングする記事のメモ (blog@browncat.org))
これは、なんとかせねばだ。と言うことで、プラグインを止めたり改良したり、結果をキャッシュに持ったりしてみました。
ちなみにウチのサイトと他の方の WordPress サイトのトップページでの query 数を比較すると、こんな感じ。
サイト | query 数 | 処理時間 |
---|---|---|
独断と偏見の何でもレビュー | 69 queries | 2.006 seconds. |
Binsan’s Cafe | 16 queries | 0.384 seconds. |
hiromasa.another :o) | 24 queries. | 0.281 seconds. |
orioa | 61 queries. | 0.390 seconds |
M’s Life 2 | 25 queries. | 1.138 seconds. |
MMRT daily life | 25 queries. | 0.587 seconds |
query 数を増大させているプラグインを特定する
query 数を増大させているだろうと目星を付けたのは、以下の2プラグイン。
まずは、"Popularity Contest" を停止してみる。
- トップページ 69 queries. → 58 queries.
- シングルページ 35 queries. → 35 queries.
おぉ!減った減ったトップページの query 数が 11 も減ったぞ。
続いて、"Brian's Latest Comments" を停止してみる。
- トップページ 58 queries. → 42 queries.
- シングルページ 35 queries. → 35 queries.
さらに 16 減ってトップページの query 数が 42 になった!
"Brian's Latest Comments" プラグインを改良する
と、ここで止めておいたら、ある人に
一年前のエントリーにコメントしたときって、ご老公のブログに接続してコメントの返信を読むときってどうやって入っていったらいいの?
コメントしたエントリーを見つけにくいんだけど?
などと、言われてしまった。
まさに、この問題に対処するために "Brian's Latest Comments" を稼動させていたんだから、プラグインを停止しちゃダメだよな。
他にも、最近のコメントを表示するプラグインは幾つかあるけど、探すのもメンドクサイしなぁ…
と言うわけで、"Brian's Latest Comments" プラグインを改良。
毎回 16 query も消費して最近のコメントを取得するのはスマートじゃないので、キャッシュを持たせて、そちらを表示するようにしました。
コメントが投稿されたり、削除されたときにキャッシュを更新するようにして query 数を減らすことに成功!
リクエストがあればソースを公開しますが、サポートはあまり期待しないでください。
さて、さらにゴニョゴニョして、現在は
- トップページ 69 queries. → 34 queries.
- シングルページ 35 queries. → 23 queries.
になりました。
ゴニョゴニョの詳細は、また次回。
おまけ:過去のパフォーマンスチューニング
ちなみに過去のパフォーマンスチューニングとしては、こんなことをやってます。
yutaka さん、どもです。
シングルページ(投稿エントリ本文)の方は、さらにゴニョゴニョしてあります。
これについては次回。
kohaku さん、どもです。
kohaku さんの所とウチだけ妙に query 数が多かったので、共通点は無いかとジーッと見てみたら、最近のコメントの表示方法が Brian’s Latest Comments っぽかったので、目星をつけたらビンゴでした。
このプラグインは、まず最近のコメントを取得して、そのあとそのコメントのポストIDを使って、ループさせながらコメントを取得してるので query 数が増えちゃいます。
最初は SQL 文を修正して一発SQLで取ってこようかと思ったんですが、ウチのサーバの MySQL 4.1 では、サブクエリがうまいこと使えなかったので、キャッシュさせることにしました。
kohaku さんの所みたいに wp-cache を使えば良いんですが、wp-cache はコントロールが難しいんで止めました。
Brian’s Latest Comments ですが、うちでも使ってる・・・
キャッシュ持たせるだけで、随分かるくなるもんですね! 😀
25 queries. 1.920 seconds.
効果抜群ですねぇ いいなぁプラグインの改良なんて夢のような話だわ 🙄
確かに早くなってるわ〜