WordPressを「そこそこ」速くする



WordPressは遅い。その仕組み上どうしても遅くなってしまうのだが、あまりに便利なのでやめられない。ここでは、遅いWordpressを「そこそこ」速くする方法について述べる。

遅い原因

遅い原因としては、考えられるのは以下だろう

  1. そもそもサーバマシン自体が遅い
  2. WordPressの内部処理が遅い
  3. WordPressから送られてくるデータが大きすぎる(特に画像)

1.はサーバを変更すれば済むことだが、それなりに労力がかかる。サーバの評判を調べ、契約をし、サイトを移行しなければならない。

3.はLazy Load等のプラグインを使ってオンデマンドで画像を送り出すことが考えられる。

以下では、2.について追求していく。あくまでも「そこそこ」楽な方法でやっていき、満足できる体感速度になったらそれ以上のことはしない。

どの程度遅いのか、何が原因なのか?

PageSpeed Insightsは参考程度

もちろん、あまりに遅い場合には、それは体感でわかるのだが、客観的な数値としてはやはりGoogle PageSpeed Insightsを使うことかと思う。

さて、世の中には「100をとった」と吹聴する向きもあるのだが、そこまで速くなくて良い。20代、30代の数値でも十分だ。体感が問題なのであって、数値は参考程度に過ぎない。

さらにPageSpeed Insightsは、「外部から見て何が足を引っ張っているのか」がわかるだけであり、Wordpress内部については何もわからない。

プラグイン追加で遅くなる

WordPress内部の問題としては、特にテーマとプラグインだ。Wordpressの中核部分そのものの遅さは何ともしようがない。PHP言語で記述されているがゆえに、もともと遅いものなのである。しかし、その遅いものに上乗せされるものがテーマとプラグインだ。

そして、一つしか使わないテーマとは異なり、プラグインは、いくつでも導入できてしまう。そして入れれば入れるほど遅くなる。

これは有効化されたプラグインが「全ページ」で読み込まれてしまうからだ。ユーザ表示ページ(投稿、固定ページ)、管理画面に関わらず、すべてのページ生成においてロードされてしまう。

例えば、TinyMCE Advanced等の管理画面でしか使用されないプラグインがあるが、ユーザ表示ページにおいても読み込まれてしまう。逆に、ユーザ表示ページでしか使われないPopular Postsのようなものでも、管理画面表示の時に読み込まれてしまう。

ともあれ、何かしらのプラグインを追加すれば、それはWordpress内のありとあらゆる場所にインパクトを与えてしまうのである。

プラグインに関して「そこそこ」速くする方策

Plugin Performance Profilerを使う

WordPress内部処理の高速化で、まず第一に行うことは、「不要なプラグイン」の削除だ。

このためには、WordPressが重い(遅い)、P3(Plugin Performance Profiler)を使うをみて欲しい。不要なプラグイン削除だけでどの程度高速化できるかを示している。

Plugin Load Filterを使う

先に書いたように、プラグインはWordpress内の全ページで読み込まれてしまう。これを「適切なページでのみ読み込ませる」ようにする。WordPress:これならわかる! Plugin Load Filterを参照されたい。

おそらくプラグインに関しては

画像に関して「そこそこ」速くする方策

画像に関しては、「可能な限り小さなサイズ、圧縮率(jpgの場合)にする」という方策が考えられるだろうが、そういった日々の日常的な努力はプロのウェブ屋さんに任せておけば良い。面倒なのでそんなことはしない。以下のような方策を使う。

Lazy Loadを使う

画像をその場で読み込ませず、スクロールされて画像が必要になったその時に読み込ませる。当方では、Lazy Load by WP Rocketというプラグインを使っている。

画像をWebP化する

WordPressプラグイン「WebP Express」その2を参照して欲しい。なお、それ以前にWebPの問題についてはWebP対応の方法を参照して欲しい。

その他の対策

ページキャッシュプラグインを使う

様々なページキャッシュプラグインがあるのだが、体感的にはプラグインの削除改善よりも影響は小さいように思う。なんでも好みのものを入れて見ると良いだろう。

wordpress自体をいじる

例えば、PageSpeed Insightsで「レンダリングを妨げるリソースの除外」をしろなどという項目が出てくるのだが、これに対処するにはwordpressのfunctions.phpにコードを追加するなどといった対処をしなければならないようだ。本稿の「そこそこ」にはそぐわないので省略する。