0

さて、これは通常のウェブサイトよりも少ないリソースを使用するウェブサイトをどのように設計するかという問題の一種です。モバイルも最適化されています。

ここにそれがあります:私は例えば5つの投稿(例えばブログから)の特定の概要を表示しようとしていました。次に、たとえば最初の投稿をクリックすると、この投稿が新しいウィンドウに読み込まれます。しかし、データベースに再度接続して特定のIDでこの特定の投稿を取得する代わりに、以前に作成した5つの投稿の配列でその投稿を(PHPで)検索します。初めて。

ダウンロードするデータを保存しますか?PHPはサーバー側でも機能するため、よくわかりません。

わかりました、もう一度説明します:

方法1:

  1. ユーザーが私のウェブサイトに接続します
  2. 5投稿が表示され、配列に保存されます(すべてのデータを含む)
  3. ユーザーは最初の投稿をクリックし、この投稿に関する詳細情報を期待しています。
  4. 私のプログラムは配列内の投稿を検索して表示します。

方法2:

  1. ユーザーが私のウェブサイトに接続します
  2. 5件の投稿が表示されます
  3. ユーザーは最初の投稿をクリックし、この投稿に関する詳細情報を期待しています。
  4. 私のプログラムは再びMySQLに接続し、サーバーから投稿を取得します。
4

5 に答える 5

2

まず、これは時期尚早の最適化の場合のように聞こえます。測定によって賢明なことが証明されるまで、データベースの外部に何もキャッシュし始めませんでした。キャッシングは、目前のコアタスクから焦点を外し、複雑さをもたらします。

DBの結果をメモリに保持したい場合は、PHPで処理されたHTTPリクエストで割り当てられた配列を使用するだけでは不十分です。ページが処理されると、そのスコープで割り当てられたメモリは使用できなくなります。

結果をSESSIONスコープに入れることはできます。一部のDB結果をSESSIONに保存することの利点は、DBのラウンドトリップを回避できることです。欠点には、ソリューションのプログラミングの複雑さの増大、アクセスできないデータのためのWebサーバーのメモリの使用、およびユーザーがすべて要求する場合としない場合がある余分なページを取得するためのDBの初期ロードの増加が含まれます。

測定後のDBパフォーマンスが実際にパフォーマンス目標を達成できない場合は、 memcachedなどの実績のあるキャッシュシステムを使用して、頻繁にアクセスされるデータをWebサーバー(または専用キャッシュサーバー)のメモリに保持できます。

最後の注意:あなたは言う

PHPはサーバー側でも機能します

それは正確ではありません。PHPはサーバー側でのみ機能します。

于 2013-01-28T18:23:09.227 に答える
1

私にとって、これはデータベースへの2回目の呼び出しよりも少し非効率的であり、その理由はここにあります。

最初のクエリは、タイトル、作成者、日付など、必要なフィールドのみを取得する必要があります。投稿の内容は多分重いクエリなので、それを除外します(必要に応じてティーザーを引くことができます)。

次に、ユーザーが投稿の詳細を必要とする場合は、インデックス付きのキー列を使用してコンテンツをクエリします。

そうすれば、見たことのない5つの投稿のコンテンツを取得することはありません。

于 2013-01-28T18:28:37.833 に答える
1

投稿をdivに保存し、ユーザーがどこかをクリックしたときにのみ表示されるようにすることを考えましたか?ここでそれを行う方法。

于 2013-01-28T18:22:56.713 に答える
1

コードとデータベースの間にある種のキャッシュを置きます。

したがって、コードは次のようになります

if(isPostInCache()) {
    loadPostFromCache();
} else {
    loadPostFromDatabase();
}

いくつかのキャッシングシステムに行きなさい、ウェブはそれらでいっぱいです。memcachedまたは自分で作成できる静的キャッシュを使用できます(つまり、サーバー上のtxtファイルに投稿を保存します)

于 2013-01-28T18:25:18.820 に答える
1

PHPコードが常にデータベースに再接続している場合は、設定が間違っており、接続プールを適切に使用していません。スタックが適切に調整されている場合、クエリの実行時間は最大で数ミリ秒になります。どうしても必要な場合を除いて、キャッシュしないでください。

ここで提唱しているのは、深刻な問題を回避することです。データベースが適切に構成されていれば、データベースクエリは簡単です。その問題を修正すれば、キャッシングの道を進む必要はありません。

あるリクエストから別のリクエストにデータを保存することは壊れた設計であり、完全に行われなかった場合、あるユーザーが別のユーザー向けのコンテンツを見ているという恥ずかしいデータブリード状況につながる可能性があります。これが、他のすべての手段が使い果たされた後に通常追求されるオプションであるキャッシングである理由です。

于 2013-01-28T18:31:12.210 に答える