smartyのキャッシュ機能を利用してPHP+mysqlの処理を軽減したく、
下記のようにmysql処理をキャッシュが存在する場合は処理せず、
キャッシュがない場合のみ処理するようにしたいです。
require './libs/Smarty.class.php';
$smarty = new Smarty();
$smarty->template_dir = './templates/';
$smarty->compile_dir = './templates_c/';
$smarty->cache_dir = './cache/';
//ここの部分をキャッシュあるなしで処理したいです
$posts = mysql_query("SELECT * from ***") or die(mysql_error());
while ($pot = mysql_fetch_array($posts)) {
$post[] = $pot;
}
$smarty->assign('post', $post);
$smarty->display( 'index.tpl');
ここからどのように追記すればいいかわからなくなってしまいました。
ご存じの方いらっしゃいましたらご教授お願いします。
isCached メソッドを使って判定します。
//ここの部分をキャッシュあるなしで処理したいです if(!$smarty->isCached('index.tpl')) { $posts = mysql_query("SELECT * from ***") or die(mysql_error()); while ($pot = mysql_fetch_array($posts)) { $post[] = $pot; } $smarty->assign('post', $post); } $smarty->display( 'index.tpl');
Smartyのキャッシュ機能について誤解があるようです。
Smartyのキャッシュ機能は、ブラウザの画面に表示させる内容をキャッシュさせるのであって、MySQLのクエリー結果をキャッシュするわけではありません。
MySQLのクエリーをキャッシュしたいのであれば、下記の処理を行います。
http://dev.mysql.com/doc/refman/4.1/ja/query-cache.html
isCached メソッドを使って判定します。
//ここの部分をキャッシュあるなしで処理したいです if(!$smarty->isCached('index.tpl')) { $posts = mysql_query("SELECT * from ***") or die(mysql_error()); while ($pot = mysql_fetch_array($posts)) { $post[] = $pot; } $smarty->assign('post', $post); } $smarty->display( 'index.tpl');
これはindex.tplのキャッシュがあればDBを参照せずキャッシュから表示し、なければDBからデータをもってくるという動作でしょうか?
現状index.phpを表示する度にDB接続しているため負担が大きく、これを解消するために考えています。
そうです。
有効なキャッシュが存在しない場合にのみ if文の中を実行します。
キャッシュのありなしは生存期間で制御します。
キャッシュの生存期間中にDBの内容が更新されると、表示が一時的に古いままということになります。
些細な指摘なのですが、
>現状index.phpを表示する度にDB接続しているため負担が大きく、これを解消するために考えています。
接続する際はmysql:ではなく、mysqli:を使用すると負担が2割改善します。
これはmysql_fetch_arrayも同様です。
将来的にはmysqliが標準化されるので、smartyを使用するのであれば可能な限りmysqliを使用したほうがよろしいかと思います。
http://otukutun.hatenablog.com/entry/2013/01/29/225140
これはindex.tplのキャッシュがあればDBを参照せずキャッシュから表示し、なければDBからデータをもってくるという動作でしょうか?
2013/07/18 12:31:56現状index.phpを表示する度にDB接続しているため負担が大きく、これを解消するために考えています。
そうです。
2013/07/20 15:33:46有効なキャッシュが存在しない場合にのみ if文の中を実行します。
キャッシュのありなしは生存期間で制御します。
キャッシュの生存期間中にDBの内容が更新されると、表示が一時的に古いままということになります。