[WordPress] APCu オブジェクトキャッシュで高速化

高速化プラグインはいろいろありますが、オブジェクトキャッシュに特化したシンプルな APCu Object Cache Backend あるいはプラグイン APCu Manager を使います。

最初に書いた頃から時を経て事情が変わったので内容を変更しました。

オブジェクトキャッシュで高速化

Xserver に特化した話です。多分。

Xserver では オブジェクトキャッシュの APCu という仕組みを利用できるそうなので、利用するために APCu Object Cache Backend をダウンロードして wp-content 内に置きました。結果、高速化半端なし。ただしちょっと使うのにコツが必要でした。

そして時が経ち、WordPressの更新も理由の一つなのか、APCu Object Cache Backend が何となくそぐわなくなってきたように感じ始めた頃、プラグイン APCu Manager が良い感じに動いてくれるようになったので切り替えました。

APCu Object Cache Backend のケース

この件について私が何か知見を持っているかというと 0 で、何の知識もありません。
WordPressでAPCuオブジェクトキャッシュを使う -フリースタイル
↑このページで知り、教えの通りのことをしたまでです。

  1. ファイルをダウンロード
    https://downloads.wordpress.org/plugin/apcu.1.0.2.zip
  2. ダウンロードしてきたファイルのobject-cache.phpを編集

    // こちらを先頭に追記 管理画面では使用しないようにするため
    if ( is_admin() ) { return false; }

  3. wp-contentディレクトリに編集したobject-cache.phpをアップロード

以上でオブジェクトキャッシュが有効になりますWordPressでAPCuオブジェクトキャッシュを使う -フリースタイル

詳しくはリンク先の記事をお読みください。

ダウンロードした object-cache.php をエディタで開いて一番上に指定の一文「if ( is_admin() ) { return false; }」を追加します。保存した object-cache.php を wp-content フォルダに入れると有効になります。

管理画面の「プラグイン」では通常のプラグインと異なりドロップインのところに鎮座していることが確認できます。

キャッシュクリア – APC Clear Cache

APCu Object Cache Backend を入れるとオブジェクトキャッシュが効きすぎて、更新作業を行っても反映されません。キャッシュをクリアする必要があります。私が試して効果が確認できたのはプラグイン APC Clear Cache でした。

APC Clear Cache は、ダッシュボードの「ツール」から設定画面に行ってクリアボタンをクリックしなければなりません。わりと頻繁にクリアの必要があるので、 APC Clear Cache ページをブックマークしてアクセスしやすい場所に置いておくといい案配です。

後に、PHP の関数 apcu_clear_cache() が効くとわかったので、簡単なphpファイルを一個作って、そっちを使うようになりました。

APCu Manager のケース

プラグイン APCu Manager です。WordPress の新規プラグインから検索で出てきます。

このプラグイン、以前試したときは無茶苦茶遅くなったので即座に消去して悪い印象しかありませんでした。が、人もプラグインも成長します。久しぶりにインストールしてみたら今度は調子良く動いています。こっちはキャッシュが効き過ぎるということもなく、余計なコツもいりません。

今は APCu Manager を継続して試用しています。

意外とちゃんと動かないAPCuプラグイン

APCu キャッシュやクリアするプラグインは、WordPressの「新規プラグイン」で検索するといろいろ出てきますが、試しても動作が安定するものが少なかったです。APCu Manager にしても、最初インストールしたときはサイト全体が怯むほど遅くなってビビりました。

はっきり言いますと、サーバーとかキャッシュとかわけ分からなくて私なんかの手に負えません。細かな相性、細かなバージョン、サーバーの対応、ちょっとしたことで状況が変わります。ここを読んでくれてるみんなも、ネット情報を鵜呑みにせず、また、一度目の結論をいつまでも引き摺らず、こまめなテストと運で乗り切りましょう。

Digital Boo Pennguin Icon 以降はオマケの御託です。

オブジェクトキャッシュ

Query Monitor 警告

WordPress で Query Monitor プラグインを利用していると、ときどき「遅いクエリ」という警告が出てきて「あなたの環境で APCu が利用できるからオブジェクトキャッシュを使えばいいよ」みたいなことを言われます。何のことやらわかりませんが、親切にも、WordPress の新規プラグイン画面で検索窓に「APCu」と入力までしてくれて、それで「APCu はオブジェクトキャッシュが使える仕組みのようなものだな」と理解出来ました。

wp 6.1

WordPressのバージョン 6.1 以降、サイトヘルスが同様の警告をしてくるようになったそうです。「永続オブジェクトキャッシュを使用してください」とか何とか言ってくるとか。

オブジェクトキャッシュ

昔、オブジェクトキャッシュだけを行うプラグインを使っていましたが、いつしか消え去りました。確かに、あの頃オブジェクトキャッシュはよく効いた。今でもそれは変わらないのですね。良く効いたけれども、トラブルの原因ナンバーワンでもありました。それはともかく。

Xserver ではサーバー側で機能するオブジェクトキャッシュの機能が備わっていて、APC と OPcache が使えるという。
APC/OPcacheについて – xerver に説明があります。

機能は備わってはいますが、実際に利用するには明示的に使用することを命じる必要があるとのことです。もちろん素人には命じることなどできません。

キャッシュプラグイン

そこでWordPressのプラグインを探します。Query Monitor が教えてくださった「APCu」での検索により、いくつかのプラグインがヒットしました。

見つめていても仕方がないので、オブジェクトキャッシュに特化したように思えるプラグインをいくつかインストールして試しました。

一般的に、統合型の大型キャッシュプラグインをお勧めされることが多いのですが、私は統合型の大型キャッシュプラグインというものが嫌いで、というのも、以前痛い目に遭っているからです。非力な共用型レンタルサーバーで使用すると大抵逆効果、より遅くなることのほうが多いです。設定もごちゃごちゃしていて鬱陶しいし。

ということで以下、いくつかプラグインを試しては悪態をついていましたが一つを残し削除しておきました。

APCu Manager

APCオブジェクトキャッシュだけをオンにしたいのだ、と、次に試してみたのは APCu Manager というプラグイン。完全にAPCuに特化しているようなので期待しました。

結果、のけぞるレベルで遅くなりました。ページは現れないわ、現れてもクリックに反応するまでに数秒かかるわ反応してから表示されるまで十数秒かかるわで、いったい何が起きたのかというレベルで使い物にならぬ低速化に見舞われました。こちらも相当に相性が悪いようでした。

という感じで、APCu検索で出てくる公式公認のプラグインはどれもこれも壊滅状態で、ぜんぜん駄目、何もしないほうがましでした。例に挙げたプラグインを悪く言うつもりはございません。サーバー、WPバージョン、プラグイン、その他その他、何かしら相性が悪かっただけだと思います。

↑ と、書いていたわけですがすでに述べたとおり、今は APCu Manager 快適です。何が起きたのでしょう。

ちなみに追記している今現在、WordPress 6.1.1、APCu Managerが 3.5.1 です。

コンマ1で世界が変わる、付き合いきれない世界がそこにあります。

APCu Object Cache Backend はどうなった?

オブジェクトキャッシュのプラグインは動く根っこが深いといいますか別次元ぽいので、プラグインフォルダ内で事が済まず、content フォルダ内にファイルが置かれます。

object-cache.php

APCu Object Cache Backend  も object-cache.php、APCu Manager をインストールしても object-cache.php です。

APCu Object Cache Backend を使っているのに APCu Manager をインストールして、最初は共存しているのかと思いましたが、contentフォルダ内の object-cache.php が入れ替わっただけのようでした。

付録

APCu Object Cache Backend の謎

APCu Object Cache Backend について、腑に落ちない点があります。

これは一体何だろう、とURLを確認したら、https://downloads.wordpress.org/plugin/apcu.1.0.2.zip で、普通にWordPressのプラグインじゃん。とわかります。プラグインページを見てみました。すると…

apcu
APCu Object Cache Backend プラグインページ

「このプラグインは2019年9月7日に終了しておりダウンロードできません。この閉鎖は恒久的です」となっておりますよ。

参考にした先生のページは2021年に書かれていて、プラグイン配布停止後です。さらに、ダウンロードしたのは最終バージョン2.0.0ではなく 1.0.2 です。これはいったい、どういうことでしょうか。

(ここでいろいろ検索して読んでみた形跡)

いろいろ読んでみてわかってことは、さっぱりわからないということでした。APCu Object Cache Backend はプラグインとしては終わっていますが、根幹の部分だけちょっと変えれば使えるということでしょうか。だからキャシュクリアができないんでしょうか。理解なきままですが、よしとしておきます。

キャッシュクリア

APCu Manager ではキャッシュの消去も機能の中にありますので関係ありませんが、APCu Object Cache Backend を使うならキャッシュを消去する機能を追加する必要があります。

APC Clear Cache

プラグイン「APC Clear Cache」は「ツール」の設定画面に Clear ボタンがあるだけ。シンプル。キャッシュを消します。動きはパーフェクト。最終更新が2年前でも気にしない。

The Cache Purger

人間、贅沢にはすぐに慣れるもので、APC Clear Cache はとても良いのですが、ダッシュボードのツールからボタンに辿り着くのがとても面倒に思えてきます。もっと手早くクリア出来ないものかと少々探りましたら、 The Cache Purger なるプラグインがありました。

オブジェクトキャッシュのみならず、主なキャッシュプラグインが作るキャッシュをまとめてパージするという 乱暴者 優れものです。admin bar にもクリアのメニューが付き、アクセスも簡単。これはいいかも。

と、思ったのもつかの間、ぜんぜん消えてくれないです。これ、駄目でした。

PHP

ところで、PHPの関数に apcu_clear_cache() というのがあります。APCuキャッシュをクリアする関数だそうです。→ apcu_clear_cache

apcu_clear_cache()

これだけで良いようですが、これって、どうなんでしょう。ちょっと試しました。

body に<?php apcu_clear_cache() ;?>  だけを書いたHTML書式のphpファイルを作って置いてみたんです。ブックマークして、このページにアクセスするだけでキャッシュがクリアされると期待してテスト。

クリアされたようです。キャッシュクリアだけのプラグインは不要かもしれないですね。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="noindex,nofollow">
<title>Clear APCu cache</title>
<style>
body{font-family: sans-serif }
</style>
</head>
<body>
<?php apcu_clear_cache();?>
<p>APCu cache cleared.</p>
</body>
</html>

 

 

 

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください