takedajs ログ

備考録

CodeIgniterのwebページキャッシュを検証する

webページキャッシュの導入方法や導入前後でのパフォーマンスの比較結果を書きました。

環境

vagrantでcodeigniterを構築
CodeIgniterのバージョンは 3.1.0

検証コード

1億回ループする簡単なコードです。
$this->output->cache(n);をアクション内の好きなところに書くだけで、キャッシュされます。ただ、後ほど説明する権限周りの調整は必要です。

public function index()
{
   //5分間ファイルキャッシュ
   //キャッシュファイルはデフォルトでapplication/cacheに格納される
   $this->output->cache(5);

   $tmp = 0;
   //1億回ループ
   for ($i=0; $i<=100000000; $i++) {
      $tmp += 1;
   }

   $this->load->view('welcome_message');
}

アクション内に書くことで、そのアクションのページをキャッシュします。
全ページ一括でキャッシュする書き方もありますが、今回は記述しません。

キャッシュ機能を利用するための準備

キャッシュファイルを格納するディレクトリの権限を変更します。 僕の環境ではディレクトリを以下の権限にしました。

drwxr-xrwx@ cache/

これで、キャッシュをしたいページにアクセスすると/application/cache配下にキャッシュファイルが作成されます。

7227268e442aff504545d01ff534741f  index.html*

これで再度ページにアクセスしたら早くなると思ったのですが、全く早くなりませんでした。 作成したキャッシュファイルの権限が問題でした。

-rw-r----- 7227268e442aff504545d01ff534741f

以下のように権限を設定したところ、キャッシュを利用できました。

-rw-r--r-- 7227268e442aff504545d01ff534741f

検証結果

今回、検証するページとして、codeigniterを導入後に一番初めに表示されるページを利用しました。 ページスピードが画面上に表示されるので、便利です。

キャッシュを利用前(5.1692s) [f:id:takedajs:20160828092710p:plain:W400]

キャッシュ利用後(0.03s) [f:id:takedajs:20160828092727p:plain:W400]

1億回のループ分早くなっていることが分かります。

まとめ

codeigniterのwebページキャッシュは、コードに一行加えるだけで簡単に実装可能でした。 ただ、一部のapiをキャッシュなどではなく、ページ全体をキャッシュするので、 動的な処理が多いサイトで今回のキャッシュを入れるとなると、色々と考慮する必要がありますね。

参考

ウェブページのキャッシュ — CodeIgniter 3.1.0-dev documentation

Linuxの権限確認と変更(超初心者向け)