WordPressの3.3のパーマリンクパフォーマンス改善について調べてみた

WordPressの3.3のパーマリンクパフォーマンス改善について調べてみた

WordPressの3.3もリリースされましたね。
3.3でのアップデートではメディアアップローダーの変更が一番の目玉かとは思いますが、目に見えないところでの改善も多数存在しています。今回は、その中の1つであるパーマリンクのパフォーマンス改善について、調べてみたのでまとめておきたいと思います。
ちょっと、小難しい内容も含んでいますが、概略だけでも掴んでおくことは大事なので、是非ご一読を。

3.3の新機能あれこれについては、おでさんの「WordPress 3.3 の新機能をおさらいしよう、そうしよう」にうまいことまとめられていますので、そちらを参照のほどを。

3.2までのパーマリンク

WordPressのパーマリンクでは、現在11種類の構成タグが利用できるようになっていますが、そのうち %postname%%category%%tag%%author% の4種は、「パフォーマンス上の理由で %xxxxxxx% で始まるパーマリンクは非推奨です。」との注釈がついています。

また、構成タグの注釈としても、次のような記述があります。

パフォーマンスの観点から、パーマリンク構造がカテゴリ名、タグ名、著者名、投稿タイトルフィールドから始まるのは好ましくないといえます。これらはテキストフィールドなので、パーマリンク構造の先頭に用いると、WordPress が投稿とページ (ページは常にページスラッグを URL に含みます) を区別するのに時間がかかり、代償として、WordPress が余計な情報をデータベースを蓄えることになります (多くのページがあるサイトは大変でしょう)。したがって、/%year%/%post_name%/ や、さらには /posts/%post_name/ のように、少なくとも 2 つのパスセグメントを含めるのがベストでしょう。(パフォーマンスの観点から /%post_id%/%post_name%/ を推奨する人もいますし、この形式はユーザーと URL のインタラクションの多くの文脈で親切でないと批判する人もいます。) このトピックについての詳細は Otto’s technical writeup あるいは wp-testers メーリングリストを参照してください。

つまり、「パーマリンクの最初がに数字以外の可変要素が入ると遅くなるから遠慮してね。」ってことになってたのでした。

パーマリンクのしくみについておさらい

WordCamp Tokyo 2011での発表でも軽く触れましたが、WordPress は、パーマリンクを利用している場合でも、内部的にはデフォルトのパーマリンクと同じパラメータに変換を行って表示条件を決定しています。
そして、この変換を行うためのマッピングパターンが rewrite_rules という options テーブルに保存される配列データです。

3.3と3.2での比較

引用した WordPress が余計な情報をデータベースを蓄えることになります (多くのページがあるサイトは大変でしょう)。 と、上記で説明した内容からすると、rewrite_rules の中身がキーとなっていそうなことが推定できるので、3.3 と 3.2.1 でのrewrite_rules を比較してみました。

検証環境は、下記の通り

パーマリンク設定
/%postname%/
投稿数
23
固定ページ数
12

※ インストール直後の WordPress にテストデータをインポートした状態で検証

両バージョンでの rewrite_rules の差分を比較すると下図のようになります。
黄色い部分は異なる、または追加されている部分、グレーの部分は存在していない部分となります。

左が3.2.1、右が3.3ですが、3.3の方が圧倒的に少なくなっているのが分かりますね。
さらに、注目してもらいたいのが、3.3と3.2.1の配列要素数の差。12固定ページに対して 193 – 67 = 126と、固定ページあたり10.5の差となっています。よくよく見れば、3.2.1の21行目から31行目で、sample-pageという1固定ページに対して11の変換パターンが生成されているのも見て取れます。(10.5になっているのは、下部で3.3での若干の追加分があるため)

つまり、非推奨のパーマリンク設定を行っている状況において、100ページの固定ページがある状況では、1100以上もの rewrite_rules が生成されてしまっていたことになります。

具体的に顕現する問題としては、rewrite_rules が肥大化し、MySQLへのパケット制限を超過。これにより極端な表示や更新速度の低下を招く事態となります。
(恥ずかしながら、これで痛い目を見たことが。。)

3.3での状況

3.3では、どのようなパーマリンク設定にしても、固定ページが増えることによる rewrite_rules の増加はみられませんでした。
本家 CODEX の Using Permalinks では、すでに非推奨の記述も削除されています。

これからは、状況に応じて自由にパーマリンク設定を出来ますし、今まで非推奨の設定をされていた方は、アップグレードすることで、速度改善や問題発生を未然に防ぐこともできます。

補足

比較した rewrite_rules のデータをダウンロードできるようにしておきます。見てみたいかたはご自由にどうぞ。

Download
Rewrite Rules Sample

「WordPressの3.3のパーマリンクパフォーマンス改善について調べてみた」への1件のフィードバック

コメントを残す

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