XPressME Integration Kit

フォーラム

Re: WP Super Cacheのプラグイン導入時のXPressMEハック

#3004
匿名
ゲスト

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が効くことが分かりました。

  1. 初回リクエスト

    cookie「無し」の状態でcacheが作られる。

    次にXPressMEプラグインが動作し、$author_cookie (=(dirname)_select_author)cookieが作られる。

  2. 2回目リクエスト

    select_authorのcookieがあるので、cookieが「1つだけ有り」の状態でcacheが作られる。初回リクエストで作られたcacheは使用されない。

  3. 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回目から効く

ことになります。

いろいろとご教授ありがとうございました。

よろしくお願いいたします。