Re: WP Super Cacheのプラグイン導入時のXPressMEハック
永らくありがとうございました › フォーラム › バグ報告と提案 › WP Super Cacheのプラグイン導入時のXPressMEハック › Re: WP Super Cacheのプラグイン導入時のXPressMEハック
toemon様
uemeraです。お忙しいところ、さっそくのご返信ありがとうございます。
XOOPSのイベント通知(プライベートメッセージ)、それも公開予約している記事が公開になったときの処理の為に、追加しています。
REQUEST_METHODを強制的にPOSTに書き換えている件、了解しました。
どうしても必要な処理だったんですね。
私もXOOPSモジュールを作ったことがあるので分かるのですが、確かにGETでは
更新処理は許されていませんので、止むなくPOSTにて処理したことがあります。
提供いただいた、XOOPSだまし討ちのコードを代わりに埋め込んでみたところ、これでcacheの方も
うまく動くようになりました。どうもありがとうございます!
cookieの方は、すみません私が勘違いしてたところがありました。
再度supercacheの仕様や挙動を確認したところ、以下のことが分かりました。
・cacheの生成条件は、ページ単位ではなく、「ページ」と「cookie」単位である
つまり、例えばindex画面(記事一覧画面)表示において、以下のリクエストはそれぞれ
違うcacheファイルを生成します。
言いかえれば、以下のリクエストはどんな順番で来ても、それぞれの初回表示は
cacheが使用されず高速表示されません。
・1つもcookieを持たないブラウザからのリクエスト
・1つだけcookieを持つブラウザからのリクエスト
・2つcookieを持つブラウザからのリクエスト
cookieを持っているかどうかの判断は、
if ( preg_match( “/^wp-postpass|^wordpress|^comment_author_/”, $key ) ) {
にマッチするかどうかで決まるんだと思います。
ここで、あらためてXpressME経由のWordPressのindex画面表示の動作を見て見ると、
以下のようになり、3回目のリクエストで初めてcacheが効くことが分かりました。
- 初回リクエスト
cookie「無し」の状態でcacheが作られる。
次にXPressMEプラグインが動作し、$author_cookie (=(dirname)_select_author)cookieが作られる。
- 2回目リクエスト
select_authorのcookieがあるので、cookieが「1つだけ有り」の状態でcacheが作られる。初回リクエストで作られたcacheは使用されない。
- 3回目リクエスト
cookieが「1つだけ有り」の状態のcacheがあるのでそれが使われる。
つまり、$author_cookieの名前を変更しなくても、3回目にはcacheされます。
プラグインの名前の順番により、XPressMEよりもWP Super Cacheの方が先に処理されるため、
このような挙動になるようです。
仮に、先日私が行ったような$author_cookieのcookie名称を変更をした場合、2回目リクエストで
super cacheは「cookieなしリクエスト」と解釈するので、
2回目リクエストの時点でcacheされるようになります。
ちなみに、上記の説明はすべて未ログイン状態での話です。
ログインした場合はAUTH_COOKIEなど別のcookieも生成され、未ログイン時とはcookieの数が変わる
ので、これはこれで別のcacheが新しく生成されます。
1回分余計にcacheが機能しないだけの差ですので、XPressMEのcokkie名の変更まではしていただく必要
もないかなと思っています。
あと、WP Super Cacheは、「ON」モードと「HALF ON」モードがあり、「ON」モードの方が速いらしいのですが、
私の環境では「ON」モードはどうも動きがおかしいので採用をあきらめました。
これは、XPressME経由ではない素のWordPressでもうまく動かなかったので、今回とはまた別の問題と思います。
しかも、「ON」モードにしても、パラメータ渡しが伴うGETリクエストはすべて「HALF ON」モードで処理されて
しまう仕様であり、「ON」モードで動くシーンは限られていますので、「ON」モードにしてもそれほど恩恵を受け
られる訳ではありません。
初回アクセスの判断のみが問題だとすれば、WP Super Cache側でアクセス済みクッキーを設定して、判断するという手もあるかも・・・
ダッシュボードからの設定を見てみましたが、そのような設定はできなさそうでした。
ソース変更についても、上記でご説明したように、メカニズムはだいたい分かり、回避もできますので、
WP Super Cache側の変更は必要なさそうです。
まとめますと、WP Super Cacheを導入するに当たっては、
・XPressME側のPOSTメソッド設定処理の変更
するだけで動作し、
・cacheは3回目から効く
ことになります。
いろいろとご教授ありがとうございました。
よろしくお願いいたします。