アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、ひとつのページ内で50以上のSQLコマンド(select)が行われるページを作成しています。
そのページへアクセスする度にサーバへの負荷が懸念されるために悩んでいましたが、
Smartyという対処方法があることを聞いたために、Smartyで作成してみましたが・・・。

Smartyは表示テンプレートを自動で作成するために、差分がない場合にはサーバへの負荷が軽減されることを期待し、参照するSelectの結果値が異ならなければ、SQLサーバへの参照は行かないことを期待していましたが、SQLのログを確認すると、毎回SQLコマンドを投入して同じ値を参照しているように見えています。

Smartyにはテンプレートフォルダが二つあり、差分がない場合には、前回自動作成したテンプレートを使用すると書籍やネットに記載されていたのですが、Smartyの使い方や認識に誤りがあるのでしょうか。


[作成中のページのイメージ]
PEAR:Calenderなどを利用してカレンダーを表示して、各日付に該当するデータの有無(個数)を問い合わせて表示するものです(カレンダーの各日付の下に、その日付のデータ数が記載される)。データ数を検索して、カレンダーと表示する機能は、function化しており、テンプレートファイルから呼び出されます。

A 回答 (2件)

カレンダーの場合は、どうしてもSQLのクエリ発行回数が多くなってしまいますね。

これは経験してみて始めてわかります
結論から申しますとsmartyでもよいのですが
smartyでなくてもphpで簡単にキャッシュさせたることは出来ます。
なのでキャッシュを理由としてsmartyにこだわる必要は無いと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

いろいろと考えた結果、キャッシュに頼った場合、キャッシュ時間によってDBとの不整合が懸念されるために、DBへの書き込みがあった段階でSQLを発行して、カレンダーのHTMLをファイルへ吐き出して、それ以降は、readfileによって吐き出されたHTMLファイルを読み込み方式として進めたいと考えています。

お礼日時:2008/10/04 00:42

Smartyで使用するディレクトリで、compile_dirディレクトリにはテンプレートをPHPにコンパイルした結果が入ります。

これにより、毎回テンプレートを評価する必要がありません。ただし、これはテンプレートのコンパイルであり、PHPのプログラムは実行されます。

cash_dirディレクトリには、PHPの実行結果のHTMLが格納されます。これを有効にするには、$cashingを1か2に設定し、$cash_lifetimeを設定する必要があります。これによって、$cash_lifetimeの間は以前に作成されたHTMLをそのまま表示します。

ただ、差分があるかどうかは、実行しないと分かりません。キャッシングを有効にしておくと、データに変更があっても時間内は以前のままのページが表示されます。

問題は、50以上のSQL文を発行するというコーディングの方にあるのではないでしょうか。データ数検索を関数としてカプセル化しているようですが、そこで毎回SQL文を発行しているようでしたら、プログラムの組み方そのものを考え直した方が良いのでは・・・
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
Smartyについて理解が進みました。

となると、ご指摘の通り、50以上のSQLが毎回発生するindexページはセンスが悪そうなので、別の方法を検討したいと思います。

お礼日時:2008/10/04 00:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!