WordPressサイトはサイトを始めた当初は軽快に動いていても、記事が増えていくと次第に遅くなっていきます。
これは色々原因があります。
- PHPからHTMLを生成するのが遅い
- データベースが遅い
- 外部リソースアクセスが遅い
静的ページキャッシュプラグインを導入すればほとんどの問題は解決しますが、静的ページキャッシュプラグインは初回の読み込み時はキャッシュを生成するので、キャッシュが効かないので遅くなります。
素のサイトのページ表示が速くないと結構ストレスがたまりますのでサイトが遅い根本の原因を探る必要があります。
まずは、状況を把握しましょう
サイト表示が遅くなるボトルネックを詳細に調べるには、プロファイラーを使うというのが一般的です。
プロファイラーはプラグインとして提供されているものを使うのが簡単です。

使ってみるとわかりますが、あまり役に立ちません。
もっと簡単に調べる方法があります。
Query monitorというプラグインを導入します。
このプラグインを導入すると、2つの時間が表示されるようになります。
- ページ生成時間
- データベースクエリーの時間
この時間のうち、データベースクエリーの時間は通常だとほぼ0sのはずです。
サイトの表示が遅いなと感じたら、データベースクエリの時間が極端に大きくなっていることが多いです。
データベースクエリが遅いと、ページ生成時間もそれにつられて遅くなります。
PHPからHTMLを生成するのが遅い
PHPでページを生成しているので、PHPのコードが複雑になればそれだけページ生成の時間が伸びます。
PHPによるページ生成時間が遅い問題は静的ページキャッシュプラグインを導入することで解決できます。
キャッシュプラグインを導入するとHTMLの生成時間がスキップできますので、キャッシュデータの読み込み時間に置き換えられます。
HTMLサイトとほぼ同じようなイメージになります。
それでも、サイトの表示が遅いということだと、結果をキャッシュ出来ていない要素が影響していることになります。
データベースクエリを減らす
データベースクエリは、最初は全く気になりません。
しかし、カスタムタクソノミーで独自タームを追加していたり、記事の数が数万を超え始めると、クエリの結果が返ってくるのが急激に遅くなります。
プラグインなどもデータベースクエリを発行しますので、データベースクエリの時間が伸びている場合は、プラグインをオフにしてみたり、追加したコードを止めてみたりしながら、データベースクエリの時間が伸びている原因を探ります。
データベースクエリは結果をキャッシュしてしまえば、高速化できるはずですが、それが難しいこともあると思います。
その場合は、そのクエリが本当に必要か検討する必要があります。
もっと高速なクエリで代用できないかも考えると新しい発見があると思います。
ユーザーによってクエリの結果が変わらないものであれば、transientキャッシュでキャッシュしていけば、高速化できるはずです。
外部リソースへのアクセスを減らす
外部画像の直接埋め込み、SNSの埋め込みなどはキャッシュされませんから、それらが一つのページ内で増えてくるとページの表示が遅くなります。
外部アクセスというのは1つや2つなら気になりませんが、数十を超えるあたりから急激にページ表示に影響してきます。
lazyloadを使えば基本的にはファーストビューに影響はありませんが、その後の読み込みは減らないのでページの読み込みが終わるまでの時間はやはり伸びてきますからユーザー体験としては読み込みの数値以上に悪化すると考えた方がよいでしょう。
外部画像を気軽にアイキャッチ画像に指定できるプラグインとして、Featured Image from URL (FIFU)があります。

このプラグインを使うと、アイキャッチ画像に外部画像を指定できるようになりますが、記事一覧などで外部画像を読み込むために遅くなります。
FIFUで外部画像を取り込んで保存してくれるのはproバージョンのみです。
XO Featured Image Toolsなら外部画像をメディアライブラリに登録してくれます。
フックを使えば、FIFUと同じように使うことも可能で、メディアライブラリに保存もしてくれますから無駄な外部アクセスを減らすことができます。
SWELLが高速な理由
SWELLが高速な理由は、テンプレートパーツを呼び出すget_parts()関数内部でtransientキャッシュを使い、HTML出力をキャッシュしているからです。
それに尽きます。
記事ごとに内容が変わるコンテンツ部分をのぞけば、SWELLにはキャッシュする機能が付いています。
しかし、静的ページキャッシュのプラグインは同じことをやっていますから、SWELLはキャッシュプラグインを導入していなくても速いけど、キャッシュプラグインと併用しても速くならないということを示しています。
キャッシュプラグインを導入していない場合や初回の表示を高速化したい場合にはSWELLは高速だと言えるでしょう。
また、この考え方は自分でショートコードなどを書いている場合にも適用できます。
データベースクエリが遅いような内容の場合は自分でtransientキャッシュを導入してHTML出力をキャッシュすると、データベースクエリの回数が減りますのである程度高速化できます。
コメント