WordPress高速化という不毛な戦いにうんざりした話
久しぶりに「WordPressサイトを高速化した欲しい」という案件を受けて、その不毛な戦いにうんざりしたので、まとめました。
公開日: 2022.4.27
なかなか終わらないWordPress案件
自分が個人で開発を受ける案件として、WordPressサイトはもう5年くらいお断りしているんですが(ちなみに、それ以来、たまの改善案件以外、WordPressは触ってません)、過去に請け負った会社さんのWordPressサイトについては、基本的には格安でメンテや改修を受けています。
ページを追加したいとか、デザインを変えたい、とかは、ある程度の工数が読めるので良いのですが、一番嫌なのが「サイトの高速化」。しかも、大体の会社さんはサーバー費用はそのままって条件です。
そもそも、自分が受けたWordPress案件は、デフォルトで高速化できるところは極限まで入れているので、そこから高速したかったら、フレームワーク選定からやり直しです。
ただ、クライアントはWordPress漬けになっているので、WordPress以外は嫌がります。そりゃそうですよね、やっとWordPressでページ作成を覚えたのに、今からまた新しいのを覚えろなんて、専業でもないのに嫌なのが普通です。
言葉で言うほど楽じゃない、WordPress高速化
WordPress高速化というとなんかプラグインだけで入れればOKみたいな風潮があるんですが、そういうレベルで高速化できるのはプレーンな状態な時くらいです。インストールしたばっかのWordPressとかそんな遅くないですからね。
問題は、数年運用してDBが肥大化していたり、プラグインを突っ込みまくって重くなっている長寿サイト。これは記事内への影響をテストしつつ、不要なプラグインを削除したり、代替関数を自分で用意したり、DBに残っているゴミを削除したりと、まあまあ手間です。
ちなみに、この状態になっている、積年の垢がついたWordPressサイトは、サーバーを一つ上のプランにアップグレードしたくらいじゃ高速化できません。まあ、200msくらいは高速化できるかもしれませんが。
どうしてWordPressは高速化が難しいのか
自由度が高速化とトレードオフになっている
WordPressはCMSとページ表示を一つにし、さらに開発者が自由にプラグインやテーマを開発して適用できるようにしたフレームワークです。つまり、「あんなこと、こんなこと、いろんなことがある前提のCMS」なわけです。
当たり前ですが、プログラムは条件を絞るほど処理が減るので高速化ができます。「あんなこと、こんなこと、いろんなことがある前提」なんてのは、プログラムとしては重荷です。
自由度を上げるために、WordPressはいろんなところでフック処理(プラグインやユーザー指定関数がないかなどの処理)をしています。そのため、1ページを表示するだけで、結構な量のプログラム処理を裏側でしています。
5年くらい前、最後のWordPress案件を受けた時に、「なんでこんなに重いんだろう」と思って、1GBプランのプレーンなVPSで、すっぴんのWordPressのベース処理の処理時間を一つ一つ計測したことがあるんですが、確かリクエストを受けて、ページのレンダリング前の段階までで400msくらい食っていたはずです。
現在はもっと高速化されているかもしれませんが、他のPHPフレームワークでも、基本部分のロードは100ms未満が普通なので、いかにWordPressが重いかがわかります。
DBに全部積み上げる方式
WordPressを重くしている理由の半分がバックエンドの重い処理だったとしたら、残りの半分はデータベースが原因です。
WordPressは記事を自動保存してリビジョン管理ができますが、あれは全部データベースに保存しているから成り立っているのです。リビジョンが増えるほど、記事が増えるほど、データベースが肥大化して、目的のデータを探すのに時間がかかるようになります。
プラグインでリビジョンを消すこともできますが、WordPressのプラグインでデータベースを触るのはトラップが多いので、データベースを理解していない人にはあまりオススメしません。(というか、そもそもデータベースのメンテが必要なフレームワークって・・・)
サイトへの負荷が増えても、サーバーは強化されてないから
ここはWordPressが原因ではないですが、サーバー要因も大きくあります。
サーバーというのは負荷が上がったらスペックを強化するのが基本的ですが、レンタルサーバーというのは、基本的に10年くらいは同じスペックのものを使っています。比較的最新のCPUを使うクラウドサーバーでも、Intelの第4世代Intel Core「Haswell」を使っていることがあります。ちなみに、Haswellが登場したのは2013年で、ほぼ10年前です。
世の中のWebサイトは高度な表現を多用したり、より高速化を追求しているのに、スペックが10年前のサーバーで動かしているじゃ、高速化もできません。(だからレンタルサーバーは安いんですけど)
というわけで、WordPressサイトを高速化したいなら、
- プラグインやDBを徹底的に掃除する
- スペックが高いサーバーへ移転する
- 全部のページをキャッシュする
- WordPressをやめる
という感じになります。
これを1日とかでやれって言われたら全然できますが、ビフォア・アフターの高速化性能までしっかり担保するとなると相当骨が折れます(というか、結構速い段階(200msくらい)で高速化の限界がくる)。
専門の人だと、200msの改善って大きいですが、体感としては微々たるものなんですよね。一般の方が高速化を体感できるのって、自分の体験だと500msくらいからです。
まあ、高速化っていって受注して、実際にどれだけ高速化したかは関係なく作業ベースでお金もらっちゃうケースが多いんでしょうけどね。