エックスサーバーAPC/OPcacheは、PHPの大幅な高速化を図るPHPの拡張モジュールであると説明があります。
参考APC/OPcacheについて|エックスサーバーマニュアル
リンク先の説明は下記の通り。
- PHPの初回実行時に、PHPの内容を最適化した状態でキャッシュを実行
- 次回以降、 同じPHPにアクセスがあった際にキャッシュを利用
そうすることで、PHP実行時のCPU負荷の軽減させている。とのこと。
イマイチ理解できずに以下のように思ってサーバーに問い合わせました。
- 手元でよく編集するファイルで今まで、エックスサーバー側のキャッシュ影響が出た事がない
- でもちょっとした原因の切り分けでサーバーのページキャッシュを削除しようとした
- PHPのバージョン的にキャッシュを削除するのは不可能
そしてエックスサーバーに問い合わせたので、APC/OPcacheの内容を紹介します。
エックスサーバーのキャッシュAPC/OPcacheとは
エックスサーバーのAPC/OPcache(PHPのキャッシュモジュール)について
PHPの実行に際し、コンパイル時の中間コードをサーバーのメモリにキャッシュする、という仕組み

コンパイル→中間コード部分を2回目はキャッシュで表示する
1回目は、hoge.phpにアクセス コンパイル 中間コード プログラムの実行
2回目は、hoge.phpにアクセス キャッシュされた中間コード プログラムの実行
このような説明がありますが、分かりやすく言えば下記の通り。
やや乱暴なたとえとなりますが、お客様のご利用中のPCにおいて、なんらかのアプリケーションを実行するという動作をご想像ください。
アイコンをクリック → プログラムが立ち上がる → 目的のアプリケーション画面が表示される
おおよそのアプリケーションは上記の段階を踏んで起動します。
そして、PCのスペックや該当のアプリケーションにより差異はありますが、「プログラムが立ち上がる」工程において若干~数秒の待ち時間が生じることと存じます。
PHPのキャッシュモジュールは、この「プログラムが立ち上がる」という処理を省くためのキャッシュ機構であるとお考え下さい。
つまり、1度起動したアプリケーションを起動したままにしておく(予め起動しておく)という動作に近いかと存じます。
上記のURLにおいて解説されている「sample.phpへのアクセス」を、このたとえに表すと「アイコンをクリック」にあたります。
同様に「コンパイル→中間コード」→「プログラムが立ち上がる」、「プログラムの実行」→「 目的のアプリケーション画面が表示される」と
それぞれ読み替えていただければ、おおよその動作原理についてご理解いただけるかと存じます。
※問い合わせた時の返信が分かりやすかったので、改行点・フォント色のみ私が変更して引用してます。
- キャッシュと言ってもブラウザの表示に関わるキャッシュではない!
- プログラムの立ち上げ時間の短縮用キャッシュ
プログラム実行までの工程を1回目のアクセスでキャッシュをメモリに残し、2回目以降キャッシュを利用して高速化を可能にしている。
APC/OPcacheでキャッシュを残すタイミングについて
> 私が初めにアクセスしてメモリに保存させると、他ユーザーさんのアクセスでキャッシュ機能が有効になりますか?
一定期間内にアクセスのあったPHPファイルに対し、
サーバー側でそのファイルに対する中間コードをキャッシュしておき、
次のアクセス時点においてはアクセスを行うユーザにかかわらず、
PHPの処理が高速化される、という仕組みでございます。
サーバーキャッシュ期限について
キャッシュの保持期間については
非公開事項といたしております。
WordPress本体ファイルのどのディレクトリでAPC / OPcacheを利用しているか
PHPで実行されるすべてのファイルが対象でございます
エックスサーバーは、ブラウザ表示に関わるキャッシュは使ってない
キャッシュと言えばブラウザ側とサーバー側のキャッシュがありますけど、エックスサーバーでは、サーバー側でブラウザの表示に関わるようなキャッシュは使っていないとのことでした。
> PHPのキャッシュモジュールのキャッシュは、
サーバー側で行うPHPのHTML変換的なキャッシュと言う事か な?と思ったのが前提です。この認識はあってますか??? いいえ、若干異なります。
HTML変換のようなキャッシュの場合、サーバーに変換されたHTMLを保持し、アクセスした際にそれを表示させる、という挙動が一般的です。
この挙動は「ページキャッシュ」に分類されるため、ページ内容が更新された際にキャッシュとの差異が生じてしまう(=更新されない)状態が発生する可能性がございます。
> エックスサーバーではブラウザ側で行うの一般的キャッシュは行っ
ていない。
> ブラウザ側のキャッシュ面で原因の切り分けとして、サーバー側のキャッシュを考える必要は全くない。
> と言う事で間違いないですか?
>
> この場合キャッシュを切るメリットは一切なく、APC/OPcache機能を標準で付けて頂いていることが感謝でしかあ りません^^ はい。
こちらについては仰る通りでございます。一般的な「ページキャッシュ」とは異なりますので、
コンテンツが更新されない、というようなことはございません。
上述見出し『エックスサーバーのキャッシュとは』通りプログラムの立ち上げの時短でキャッシュを利用しているから、このようなキャッシュは使っていないとのこと。
たとえば『エックスドメイン』などでは、サーバー側が1回目のアクセスでキャッシュを残し2回目以降キャッシュを表示させている場合があり、翌日になったらキチンと表示します。
- エックスサーバーではそのような影響はありません。
ちなみにブラウザのキャッシュとは、以下の通り。
読み込んだデータを一時PC上に保存させておけば、再読み込みする時間が短縮されますよね。訪問したユーザー的には、表示が速いほうがストレスが少ないからです。
反映しないのは、ブラウザがキャッシュを一時保存してるので、ブラウザ画面を更新しても、CSSが反映されてないように感じます。はじめに読み込んだカスタマイズする前のデータを表示してるだけなので。
ブラウザに保存され表示してる古いデータを、削除して再読み込みすればカスタマイズしたデータを表示するから、新たに書いたCSSが反映されます
~ 中略 ~
キャッシュの影響とは、データをと読み込む時間を短縮してユーザーに提供するため、ブラウザが一時的にデータの保存してる状態、一度読み込んだ古いデータを表示させるキャッシュの影響のことです。
カスタマイズ時キャッシュの削除よりワンクリでシークレットモード!Chrome拡張機能「Incognito This!」|ビバ★りずむ過去記事より
PHPの5.1以上ではキャッシュモジュール機能を切れない・切る必要はない
PHPのバージョンが、7.1・7.0・5.6・5.5の場合、PHP高速化設定(FastCGI化)でキャッシュモジュールがonになっていて切ることができないです。
- エックスサーバーではブラウザ側で行うの一般的キャッシュは行っ
ていない。 - ブラウザ側のキャッシュ面で原因の切り分けとして、
サーバー側のキャッシュを考える必要は全くない。 - キャッシュがあることで高速化が見込める
この3つを考えると、この設定は切る必要すらないワケです^^
基本的にPHPにおけるキャッシュモジュールについては
お客様にて普段、意識をなさる必要なく、
PHPを高速動作させるための仕組み、とお考えいただいて
差支えないかと存じます。
プラグインのキャッシュの影響はもちろん別
自分でキャッシュ系プラグインを導入して、ブラウザ側の表示のキャッシュを1度目のアクセスで残すような設定がある場合。
画像やCSSファイル・その他設定によっては他のファイルもキャッシュで表示しているなら、ブラウザのキャッシュを削除しても、プラグイン側でキャッシュを削除しないと表示はかわりません。
さいごに
エックスサーバーのキャッシュ機能とともに、担当さんの知識も豊富で分かりやすかったので、自分の手元だけの情報にするのがもったいないので、公開しました。
コンパイル 中間コードでどんな処理をしているか、もっと聞きたかったけど現状ただの興味になってご迷惑になるかと思い聞いてません。
そこをちょっと勘違いしたのですが、担当さんのおかげで分かりやすかったので、同じように気になった方に届けば良いなと思います❦
それでは、かうたっくでした。
Comments