人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP + smarty について質問です。

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');


ここからどのように追記すればいいかわからなくなってしまいました。
ご存じの方いらっしゃいましたらご教授お願いします。

●質問者: numb08
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● だわかき
●50ポイント

Smartyのキャッシュ機能について誤解があるようです。

Smartyのキャッシュ機能は、ブラウザの画面に表示させる内容をキャッシュさせるのであって、MySQLのクエリー結果をキャッシュするわけではありません。

MySQLのクエリーをキャッシュしたいのであれば、下記の処理を行います。
http://dev.mysql.com/doc/refman/4.1/ja/query-cache.html


2 ● gizmo5
●200ポイント ベストアンサー

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');

参考URL。
http://deverock.in/posts/php/%E3%81%BE%E3%81%A0%E3%81%BE%E3%81%A0%E4%BD%BF%E3%81%88%E3%82%8BSmarty%E3%80%8C%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E6%A9%9F%E8%83%BD%E3%82%92%E4%BD%BF%E3%81%86%E3%80%8D


numb08さんのコメント
これはindex.tplのキャッシュがあればDBを参照せずキャッシュから表示し、なければDBからデータをもってくるという動作でしょうか? 現状index.phpを表示する度にDB接続しているため負担が大きく、これを解消するために考えています。

gizmo5さんのコメント
そうです。 有効なキャッシュが存在しない場合にのみ if文の中を実行します。 キャッシュのありなしは生存期間で制御します。 キャッシュの生存期間中にDBの内容が更新されると、表示が一時的に古いままということになります。

3 ● kaji0120
●50ポイント

些細な指摘なのですが、

>現状index.phpを表示する度にDB接続しているため負担が大きく、これを解消するために考えています。

接続する際はmysql:ではなく、mysqli:を使用すると負担が2割改善します。
これはmysql_fetch_arrayも同様です。

将来的にはmysqliが標準化されるので、smartyを使用するのであれば可能な限りmysqliを使用したほうがよろしいかと思います。

http://otukutun.hatenablog.com/entry/2013/01/29/225140

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ