mod_pagespeed の動作を理解する

エックスサーバー社のレンタルサーバー(エックスサーバー、X2、WPX)では、Google 社の開発・提供している Apache 拡張モジュール「mod_pagespeed」をワンクリックで適用できます。
この機能を利用すればWebサイトの表示速度の向上が期待できます。
国内初!Webサイトのコンテンツを最適化し、表示速度を向上させる「mod_pagespeed設定」機能追加のお知らせ – エックスサーバー社

mod_pagespeedとは、Google社により開発された
Webサイトの表示速度を向上させるための拡張モジュールです。

mod_pagespeedを利用することにより
画像、キャッシュ、JS/CSSなどの最適化処理が行われ、
サーバーとクライアント間の無駄な通信を削減し、
Webサイトの表示速度をより高速化することが可能になります。

このモジュールの詳しい解説は、英語の公式ページに書かれています。
PageSpeed Module – Google Developers
pagespeed/mod_pagespeed – github

日本語では、サイバーエージェント社から詳しいレポートが公開されています。
mod_pagespeedの概要と導入について – 株式会社サイバーエージェント

エックスサーバー社からは、わかりやすく図解されています。
mod_pagespeed設定とは – エックスサーバー社
man_server_modpagespeed_img

このモジュールで何ができるかというと、主な最適化処理として以下のようなことができます。

  • 画像の最適化・圧縮・リサイズ
  • CSS や JavaScript ファイルを連結、縮小、圧縮、またはHTML へのインライン化
  • キャッシュの有効期間の延長、ドメインシャーディング、ドメインの書き換え
  • JavaScript と画像の遅延ロード

と、ここまでは、色々なサイトに書いてあるんですが、
mod_pagespeedを有効にしたり無効にしたりして色々試していると、想定していない動作が。。。

どういった動作かというと、
無効な状態から有効にした後の初回アクセスは、上記の最適化処理がされないことが多いんです。

で、よくよく調べてみると、公式サイトに書かれていました。
要約すると、

  • 初回アクセスで最適化処理に時間がかかる場合は部分的に最適化したコンテンツを返す。
  • その後のアクセスでは完全に最適化したコンテンツを返す。

Configuring Downstream Caches – PageSpeed Module – Google Developers
downstream_caching

上の図では、サーバーキャッシュも含めて図示されています。
私が使用しているWPXレンタルサーバでは、mod_pagespeed と リバースプロキシ(キャッシュ) が使用できます。
エックスサーバー社に確認したところ、以下の回答を頂きましたので、この図と同様の動作になるものと思われます。
(エックスサーバー社様、ご回答ありがとうございました。)

mod_pagespeedの動作につきまして、基本的に初回リクエスト時に対象コンテンツの最適化処理が行われ、最適化したコンテンツを応答いたします。

ただし、コンテンツが複雑な場合、または最適化処理に時間がかかるような場合、部分的に最適化したコンテンツを応答してしまうことがございます。

※部分的に最適化したコンテンツを応答した場合、全コンテンツ最適化後のリクエストでキャッシュし直します。

ただ、もう少し検証する必要があるとは思うのですが、

この mod_pagespeed と リバースプロキシ の相互作用の動作に関して、
場合により、PageSpeed Insights に「圧縮を有効にする」を指摘されたりされなかったり。。。

いまのところ、以下の状態になることが多いです。でも、必ずってわけではないのがスッキリしないところ。。

  • mod_pagespeed:有効、リバースプロキシ:無効だと、「圧縮を有効にする」を指摘されないことが多い。
  • mod_pagespeed:有効、リバースプロキシ:有効だと、「圧縮を有効にする」を指摘されることが多い。

有効にする順番とかが関係するんだろうか。。。
これについては、いつか検証結果を報告できれば良いな~と思っています。