ホームページ >バックエンド開発 >PHPチュートリアル >スマート PHP の開発に関して、キャッシュの実現可能性に関するいくつかの考えと議論。 xuzuning モデレーターが来て見てみる
スマート PHP の開発に関して、キャッシュの実現可能性に関するいくつかの考えと議論。 xuzuning モデレーターが来て見ます
私は PHP SMARTY を使用して自分でプログラムを開発しました。もともとSMARTYを使っていた頃からSMARTYにキャッシュ機能があることは知っていました。しかし、当時の私にはそれがわかりませんでした。プログラムの開発が完了するまで待って、最終的にキャッシュを実行しようと考えていました。 。しかし、開発が完了したので、SMARTY キャッシュについて勉強し始めました。 Smarty のキャッシュは私にはまったく向いていないことがわかりました (よく勉強していないのかもしれません?)
まず、smarty がキャッシュ機能をオンにすると、すべてのページがキャッシュを開始し、90% のページがキャッシュを開始することがわかります。私のプログラムの機能 それはすべて即時です。キャッシュは必要ありません
機能の 10% のみ。例: フレンドリーリンク Web サイト情報バナー 10 年に一度変更する必要がない情報はキャッシュする必要があります。毎回テーブルを調べる手間を省きます。
SMARTY のローカル キャッシュ機能は、私には明らかに適していません。関数の 90% を非キャッシュ タグとして記述して呼び出すことはできませんよね。
Baidu で調べてみると、どれも同じで、解決策はまったくありませんでした (よく勉強していないのかもしれません)
その後、PHP のキャッシュ テクノロジについて勉強し始めました。 。 。 PHP は、サードパーティ ソフトウェアをインストールする場合を除き、ASP
のようにキャッシュするために IIS アプリケーションを使用できないことがわかりました。 。ほとんどはファイルキャッシュです。 。 。 。 。 。 。 。そこで質問なのですが、、、突然奇妙なことを思いつきました。
SMARTY と PHP は両方ともファイル キャッシュを使用するため。 。自分で書いてみませんか? 。メソッドは次のとおりです:
function web(){
関連する SQL クエリは配列を形成します
}
$smarty->assign('web',web());
$smarty ->display("web.html");
これは Smarty の通常の解析です。 。 。次に、これを実行できますか?
関数 web(){
if (キャッシュ ファイルが存在しない場合) {
SQL クエリを実行
TXT ドキュメントを生成し、その中にクエリ配列を配置します( 1 回目はキャッシュ ファイルが存在しない場合)
}elseif (2 回目はここでキャッシュ ファイルが見つかった場合){
return TXT ドキュメントを開き、ドキュメント内の配列を読み取ります;
}
$smarty->assign('web',web());
$smarty->display("web.html");
}
これってメソッドで思ったのですが、データベースを読む速度よりもPHPのTXTを読む速度の方が断然速い気がしますよね?
安全性を考慮せずに
1. これは可能ですか?
2. データ量が多い場合、PHP のパフォーマンスに影響しますか (重要)
3. より良い方法はありますか?
4. SMARTY はキャッシュ オブジェクトを指定できますか? 。その他はキャッシュされません。
これについて話し合ってください。答えてください。
-----ソリューションのアイデア----------------------
1. TXT の速度はデータベースの読み取り速度よりも明らかに速いです
これは正確だと思いますか?実際には、読み取りだけでなく、ファイルが存在するかどうかの確認、ファイルが古すぎるかどうかの確認など、他の行管理操作も行われるためです...
2. ファイルキャッシュがクエリ結果である場合、mysql提供された SQL_CACHE 句は、キャッシュ ファイルを自分で操作するよりも効率的ですか?
3. 10 年に一度変更する必要がない情報がある場合は、それを静的ファイルとして含めるだけではどうでしょうか?
4. あなたが説明するメソッドは、smarty のコードとまったく同じです。もちろん、smarty のコードは明らかにあなたのものよりも優れています。しかし、なぜ?これは非常にシンプルで、何年も実際の戦闘を経験した後、コードの Smarty の部分は、これまで遭遇したことも予期したこともない複雑な状況に対処できます。プロジェクトが一定期間実行されると、キャッシュ制御部分のコードも肥大化します
5. サードパーティのメモリ操作ソフトウェアを使用してデータをメモリにキャッシュすることを検討している場合は、mysql の使用も検討する必要があります。メモリテーブルはどうなるのでしょうか?少なくとも、元のコードを変更せずにメモリを操作テーブルのように操作できます
6. 動作環境が Unix 互換システムの場合、メモリベースのファイル システムのマウントも検討できますか?
つまり、改善します。効率を高めるための絶対的な方法はなく、さまざまな要素の最適な組み合わせは実験を通じてのみ見つけることができます