PHPのAPC/OPcacheとは?

レンタルサーバーの仕様を見ていると「APC対応」や「OPcache対応」といった表記を見かけます。これらに対応していると何が嬉しいのでしょうか?

APCはAlternative PHP Cacheの略、OPcacheは正確にはZend OPcacheです。

名称は違いますが機能的には同じものです。レンタルサーバーによっては、PHP5.5以上ではOPcache、それ未満をAPCと切り換えて採用しています。

PHPはインタプリタ言語です。つまり、PHPの処理が含まれるページにアクセスされるたびに「ファイルを読み込んで解析。さらにコンパイルして実行。」といった、割と負荷の高い処理が発生します。

コンパイルとは、人間に理解できるソースコードを計算機が理解できるデータ(opcode)に変換することです。

Webサイトにアクセスがある度にこの処理が発生します。この処理を省くための仕組みがAPC/OPcacheとなります。

概念はシンプルです。生成された中間コードを一時保存(キャッシュ)して再利用します。つまり、2回目以降のアクセスに対しては、そのキャッシュを利用することで処理速度を向上させます。測定方法にもよりますが、処理速度が数倍ほど向上します。

どちらの機能も目的は同じですが、処理速度はOPcacheが全体的に優れているためPHP5.5以上であればOPcacheの利用が推奨されます。そもそも5.5以上ではAPCは利用できないため、必然的にOPcacheを利用することになります。

なぜPHPのバージョンに依存するかというと、APCはPHP5.4対応のβ版で開発が鈍化しており、それ以前の安定バージョンも5.5以上では動作しません。PHP5.4まではAPCが標準的な扱いでしたが、PHP5.5以上ではOPcacheが標準となっています。

キャッシュ機能の問題点

キャッシュの更新間隔を適切に設定しないと、PHPファイルを更新してもすぐに反映されません。このこと忘れていると、Webブラウザに問題があるのか?サーバーに問題があるのか?と、原因を特定するために無駄な時間を費やします。この機能に限りませんが、キャッシュ機能はよく理解して利用する必要があります。