現在、ひとつのページ内で50以上のSQLコマンド(select)が行われるページを作成しています。
そのページへアクセスする度にサーバへの負荷が懸念されるために悩んでいましたが、
Smartyという対処方法があることを聞いたために、Smartyで作成してみましたが・・・。
Smartyは表示テンプレートを自動で作成するために、差分がない場合にはサーバへの負荷が軽減されることを期待し、参照するSelectの結果値が異ならなければ、SQLサーバへの参照は行かないことを期待していましたが、SQLのログを確認すると、毎回SQLコマンドを投入して同じ値を参照しているように見えています。
Smartyにはテンプレートフォルダが二つあり、差分がない場合には、前回自動作成したテンプレートを使用すると書籍やネットに記載されていたのですが、Smartyの使い方や認識に誤りがあるのでしょうか。
[作成中のページのイメージ]
PEAR:Calenderなどを利用してカレンダーを表示して、各日付に該当するデータの有無(個数)を問い合わせて表示するものです(カレンダーの各日付の下に、その日付のデータ数が記載される)。データ数を検索して、カレンダーと表示する機能は、function化しており、テンプレートファイルから呼び出されます。
No.2
- 回答日時:
カレンダーの場合は、どうしてもSQLのクエリ発行回数が多くなってしまいますね。
これは経験してみて始めてわかります結論から申しますとsmartyでもよいのですが
smartyでなくてもphpで簡単にキャッシュさせたることは出来ます。
なのでキャッシュを理由としてsmartyにこだわる必要は無いと思います。
ご回答ありがとうございます。
いろいろと考えた結果、キャッシュに頼った場合、キャッシュ時間によってDBとの不整合が懸念されるために、DBへの書き込みがあった段階でSQLを発行して、カレンダーのHTMLをファイルへ吐き出して、それ以降は、readfileによって吐き出されたHTMLファイルを読み込み方式として進めたいと考えています。
No.1ベストアンサー
- 回答日時:
Smartyで使用するディレクトリで、compile_dirディレクトリにはテンプレートをPHPにコンパイルした結果が入ります。
これにより、毎回テンプレートを評価する必要がありません。ただし、これはテンプレートのコンパイルであり、PHPのプログラムは実行されます。cash_dirディレクトリには、PHPの実行結果のHTMLが格納されます。これを有効にするには、$cashingを1か2に設定し、$cash_lifetimeを設定する必要があります。これによって、$cash_lifetimeの間は以前に作成されたHTMLをそのまま表示します。
ただ、差分があるかどうかは、実行しないと分かりません。キャッシングを有効にしておくと、データに変更があっても時間内は以前のままのページが表示されます。
問題は、50以上のSQL文を発行するというコーディングの方にあるのではないでしょうか。データ数検索を関数としてカプセル化しているようですが、そこで毎回SQL文を発行しているようでしたら、プログラムの組み方そのものを考え直した方が良いのでは・・・
ご回答ありがとうございます。
Smartyについて理解が進みました。
となると、ご指摘の通り、50以上のSQLが毎回発生するindexページはセンスが悪そうなので、別の方法を検討したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP PHP ページング データベース 1 2022/06/16 10:30
- HTML・CSS Dreamweaver のテンプレートでの相対パスの設定について 2 2023/06/13 17:28
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- その他(プログラミング・Web制作) パイソンでのプログラミングについて 3 2022/08/11 20:31
- Excel(エクセル) Excelで作成しているシート(表) 5 2023/06/15 10:20
- Excel(エクセル) エクセルで対象日に該当するデータがある場合に別表へ全対象者を表示させたい。 3 2023/07/12 09:48
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
fopenでファイルが開かない場合...
-
CakePHP のディレクトリの構成...
-
includeが出来ない訳とは?
-
ファイルアップロードに関して...
-
Subversionのリポジトリの削除
-
C# 特殊ディレクトリを変更した...
-
PHP ftp_fput()関数について
-
UWSCでファイルのアップロード...
-
findfirst("*",&ffblk,FA_DIREC...
-
PHPのプログラムの保存場所
-
ファイル選択ダイアログで選択...
-
CakePHPの設置ディレクトリにつ...
-
/usr/local/lib/phpとはどうい...
-
Permission denied in
-
現在位置より2つ上のディレク...
-
CFileDialogの最初のディレクト...
-
こちらはただの直列処理ですか?
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
バッチを用いたフォルダの自動移動
-
CFileDialogの最初のディレクト...
-
visualstudioでc#のdllができない
-
ファイルアップロードに関して...
-
現在位置より2つ上のディレク...
-
makefile でファイルをコピーす...
-
fopenでファイルが開かない場合...
-
rmdirでフォルダが消せません
-
絶対パス?絶対アドレス?意味...
-
コマンドプロンプトを指定のデ...
-
VB.NET 最下位のディレクトリ名...
-
VB2008でFTPでのディ...
-
DLL のロードの順序
-
MkDir関数
-
ファイル選択ダイアログで選択...
-
図に示す階層構造で,現在のデ...
-
[ ディレクトリ '.' は書き込み...
-
JAVA内で複数のファイルを削除...
おすすめ情報