Quantcast
Channel: HAPPY*TRAP » PHP
Viewing all articles
Browse latest Browse all 10

[CakePHP] Viewをキャッシュする

$
0
0
[CakePHP] Viewをキャッシュする

CakePHPでViewをキャッシュする方法です。

環境
PHP 5.3.10
CakePHP 2.1.0

設定

Cacheの設定項目のdisableをfalseに、checkをtrueに指定します。
app/Config/core.php
1
2
3
4
5
Configure::write('Cache', array(
  'disable' => false,
  'check' => true
  )
);

Controller

Controller内でCacheヘルパーを追加します。また、アクション毎のキャッシュタイムも設定します。
app/Controller/ExamplesController.php
1
2
3
4
5
6
7
8
<?php
class ExamplesController extends AppController {
  public $helpers = array('Cache');
  public $cacheAction = array(
      'index'  => 3600,
      'view' => 60,
  );
}

View
View内でキャッシュしたくないコンテンツは<!–nocache–><!–/nocache–>で囲みます。
ログイン状態によって表示を変えたい箇所がある場合などに利用できます。
app/View/Examples/index.ctp
1
2
3
4
5
6
7
<!--nocache-->
<?php if ($this->Session->check('User.name')) : ?>
    <?php echo h($this->Session->read('User.name')); ?>.
<?php else: ?>
    <?php echo $this->html->link('Login', 'users/login')?>
<?php endif; ?>
<!--/nocache-->

キャッシュを表示する場合はControllerを通らないので、ログイン状態などの動的な値は上記例のようにセッションを利用するのが良いと思います。

これで、Viewをキャッシュすることができました。

以下のディレクトリにキャッシュファイルが生成されますので確認してみてください。
app/tmp/cache/views/

同時接続数10、リクエスト数100でベンチマークをとってみたところ、私の環境ではViewをキャッシュした場合に約6倍程パフォーマンスが向上しました。
Viweキャッシュなし Viewキャッシュあり
Requests per second 30.21 190.38

アプリケーションの仕様や環境に依るところが大きいですが、トラフィックの多いサイトでは試してみる価値はあると思います。

参考サイト

Viewing all articles
Browse latest Browse all 10

Trending Articles