ホームページ >バックエンド開発 >PHPチュートリアル >Smarty+php を開発する際のキャッシュの実現可能性に関するいくつかの考えと議論。 xuzuning モデレーターが来て見てみる

Smarty+php を開発する際のキャッシュの実現可能性に関するいくつかの考えと議論。 xuzuning モデレーターが来て見てみる

WBOY
WBOYオリジナル
2016-06-23 13:41:09972ブラウズ

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の通常の分析です。 。 。では、これを実行できますか

function web(){
if (キャッシュ ファイルが存在しない場合) {
SQL クエリを実行します
TXT ドキュメントを生成し、その中にクエリ配列を配置します (キャッシュ ファイルが存在しない場合、初めて存在しません)
}elseif (ここで 2 度目にキャッシュ ファイルが見つかりました) {
return TXT ドキュメントを開き、ドキュメント内の配列を読み取ります

$smarty->assign('web',web(; ));
$smarty ->display("web.html");

}

これは私が考えた方法ですが、データベースを読む速度よりもPHPのTXTを読む速度の方が断然早い気がします、 右?

セキュリティを考慮せずに
1. これは実現可能ですか?
2. データ量が多い場合、PHP のパフォーマンスに影響しますか (重要)
3. もっと良い方法はありますか
4. SMARTY はキャッシュ オブジェクトを指定できますか。 。その他はキャッシュされません。


ぜひご相談ください。答えてください。


ディスカッションへの返信(解決策)

1. PHP の TXT の読み取り速度は、データベースの読み取り速度よりも確実に速いです
これは正確だと思いますか?実際には、読み取りだけでなく、ファイルが存在するかどうかのチェック、ファイルが古すぎるかどうかのチェックなど、他の管理操作も行われるためです...
2. ファイル キャッシュがクエリ結果である場合、mysql は次のコマンドを提供します。 SQL_CACHE 句はキャッシュ ファイルを自分で操作するより効率的ですか?
3. 10 年に一度変更する必要がない情報がある場合は、それを静的ファイルとして含めるだけではどうでしょうか?
4. あなたが説明するメソッドは、smarty のコードとまったく同じです。もちろん、smarty のコードにはあなたのコードよりも明らかに多くのコードがあります。しかし、なぜ?これは非常にシンプルで、何年も実際の戦闘を経験した後、コードの Smarty の部分は、これまで遭遇したことも予期したこともない複雑な状況に対処できます。プロジェクトが一定期間実行されると、キャッシュ制御部分のコードも太くなります。 5. サードパーティのメモリ操作ソフトウェアを使用してデータをメモリにキャッシュすることを検討している場合は、mysql メモリの使用も検討する必要がありますか?時計はどこにありますか?少なくとも、元のコードを変更せずにメモリを操作テーブルのように操作できます
6. 動作環境が Unix 互換システムの場合、メモリベースのファイル システムのマウントも検討できますか? 要するに、ハードウェアはありません。そして効率を向上させるための迅速な方法、そしてさまざまな要素の組み合わせの最良の点は実験を通じてのみ得られます

1. PHP で TXT を読み取る速度は、データベースを読み取る速度よりも明らかに速いです
これは正確だと思いますか?実際には、読み取りだけでなく、ファイルが存在するかどうかのチェック、ファイルが古すぎるかどうかのチェックなど、他の管理操作も行われるためです...
2. ファイル キャッシュがクエリ結果である場合、mysql は次のコマンドを提供します。 SQL_CACHE 句はキャッシュ ファイルを自分で操作するより効率的ですか?
3. 10 年に一度変更する必要がない情報がある場合は、それを静的ファイルとして含めるだけではどうでしょうか?
4. あなたが説明するメソッドは、smarty のコードとまったく同じです。もちろん、smarty のコードにはあなたのコードよりも明らかに多くのコードがあります。しかし、なぜ?これは非常にシンプルで、何年も実際の戦闘を経験した後、コードの Smarty の部分は、これまで遭遇したことも予期したこともない複雑な状況に対処できるようになります。プロジェクトが一定期間実行されると、キャッシュ制御部分のコードも太くなります。 5. サードパーティのメモリ操作ソフトウェアを使用してデータをメモリにキャッシュすることを検討している場合は、mysql メモリの使用も検討する必要がありますか?時計はどこにありますか?少なくとも、元のコードを変更せずにメモリを操作テーブルのように操作できます
6. 動作環境が Unix 互換システムの場合、メモリベースのファイル システムのマウントも検討できますか? 要するに、ハードウェアはありません。効率を向上させるための高速な方法、およびさまざまな要素の組み合わせの最良の点は実験が必要です


1. txt が存在するかどうかを判断するだけです。時間を判断する必要はありません。 。ユーザーが最新のデータを変更した場合だからです。 。キャッシュをクリーンアップする (つまり、古い TXT ファイルを削除する) ように彼に依頼できます
2. 私のアイデアは、配列を TXT に保存しても、それを読み取る必要があるため、html のような静的ファイルとして保存することはできません。スマート タグ {list} を使用して出力します。この配列の {/list} は途中でループされています
3. これから、SQL_CACHE 句と mysql のメモリ テーブルについて勉強します。私は PHP の初心者です。笑 ASP から転送されました

モデレーターありがとうございます


Smarty キャッシュはファイル用です。キャッシュが使用されない場所を制限することはできません。つまり、一部のページでは、ボリュームが大きい場合は、メモリを使用することをお勧めします。キャッシュ。
1. メモリテーブルまたは memcache

2. ファイル形式

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。