CakePHP1.2 RC2
開発中に debug の設定を 2 などにしておくとページを表示させる為に利用している SQL を出力してくれて大変便利です。
PostgreSQL を利用している場合、その SQL の一番上に表示される
SELECT table_name as name FROM INFORMATION_SCHEMA.tables WHERE table_schema = 'public';
などのスキーマに関する SQL の処理時間が結構かかります。
本番に導入した際にこんなに時間を取られては困るという場合は、debug を 0 にすれば解決します。
(本番環境では debug を 0 にするのは当然ですね)
この仕組みについてです。
スキーマ情報は app/tmp/cache/models/ 配下にキャッシュされるのですが、cake/libs/model/datasources/datasource.php を見てみると、
function __cacheDescription($object, $data = null) {
if ($this->cacheSources === false) {
return null;
}
if (Configure::read() > 0) {
$expires = "+15 seconds";
} else {
$expires = "+999 days";
}
if ($data !== null) {
$this->__descriptions[$object] =& $data;
}
$key = ConnectionManager::getSourceName($this) . '_' . $object;
$cache = Cache::read($key, '_cake_model_');
if (empty($cache)) {
$cache = $data;
Cache::write($key, $cache, array('duration' => $expires, 'config' => '_cake_model_'));
}
return $cache;
}
デバック情報が 0 でない場合は、キャッシュの有効期間が15秒とあります。
これの影響で、ページを表示する度にスキーマの SQL が呼ばれていたという訳です。
一方、デバック情報を 0 とした場合、有効期間が999日になっているので、毎回スキーマの SQL が呼ばれなくなります。
これで安心して本番導入できます。
#本番環境ではスキーマ情報が保持され続けるので、テーブルの構造を途中で変えたような時は、このキャッシュを削除しないと反映されないので注意しましょう。
この投稿への コメント/トラックバック はまだありません...

CakePHPに関する情報をまとめていきます。
開発スピードがアップできればうれしいです。
>>連絡はこちらへどうぞ
CakePHPを中心とした勉強会を無料で開催していますので、これからCakePHPを始めるという方でもぜひお越しください。
>>詳しくはこちらへ(高蔵寺SE勉強会)
CakePHP関連のブックマーク
CakePHP最新版
CakePHP 1.2.3.8166
CakePHPの書籍
CakePHPによる実践Webアプリケーション開発
![]()
CakePHP1.2で作成する人にオススメ。
とても参考になります。
まるごとPHP!(vol.2)
![]()
安藤さんの解説が載っています。
AmazonのPagination部分は参考になります。
CakePHPによるWebアプリケーション開発
![]()
まだ読んだことありません
CakePHPポケットリファレンス![]()
CakePHP1.2 でやるなら、これがあると何かと便利♪
CakePHP徹底入門![]()
CakePHP1.2 を今から始めるならここから
Fast CakePHP![]()
シンプルでわかりやすい CakePHP の入門書
CakePHPガイドブック![]()
CakePHP1.1 ではとても参考にした CakePHP 最初の入門書