0

私のメンバーは、X個のウィジェットを使用してプロファイルページをカスタマイズすることができます。各ウィジェットには、音楽のリスト、フォローしている人のリストなど、さまざまなデータが表示されます。

いくつかのウィジェットは次のとおりです。-アップロードしたメディアのリスト-フォローしている人のリスト-フォローしている人のリスト-HTML/テキストウィジェット-メディア統計(ダウンロード数など)-他のメンバーがコメントを残すためのコメントウィジェット

一部のウィジェットは、何百もの結果が存在する可能性があるため、返されたデータをページングする必要があります。

現時点では最適化を行っていないため、すべてのデータを返すために多くのDB作業を行っています...データを取得するための最も効率的な方法は何ですか...ウィジェットごとに1つのDB呼び出しが受け入れられますか?1ページあたり約5〜20個のウィジェットが存在する可能性があります。

私の状況についてさらに情報が必要な場合は、お気軽にお問い合わせください。

ポール

4

2 に答える 2

2

簡単な答え:状況によります。

最適化されていない状態から始めて、SQLプロファイラーまたはdotTraceなどのC#プロファイラーを使用して、改善を行うのに最適な場所を見つけます。作業する現実的な目標を設定します(たとえば、「ページをロードするのに800ミリ秒未満」)。

一般に、リクエストで約20〜30回のデータベース呼び出しを行うとパフォーマンスが低下し始めますが、これはサーバーやデータベースの場所などによって異なります。

試すことができることはたくさんあります。事前キャッシュ、選択ではなく結合を使用した熱心なフェッチなどです。インテリジェントに適用しない限り、パフォーマンスの向上を保証するものはありません。

ウィジェットが多数あるページの場合、一般的なデザインパターンは、ページ全体を一度にロードするのではなく、AJAXを使用して各ウィジェットを非同期にロードすることです。

于 2010-07-19T02:58:35.460 に答える
0

ウィジェットへの作業を切り取ったので、適切なことは、各ウィジェットが必要なすべての機能に対して単一のクエリを実行することです。これは、AJAXを介してウィジェットを取得した場合にも当てはまります(cbpが指摘したように、これは悪い考えではありません)。

次に、各ウィジェットにその存在を登録するための何らかのメカニズムを設定し、すべてのウィジェットが登録された後、すべてのウィジェットクエリを含む単一のクエリを実行します。(技術的には、これも複数のクエリですが、1回のラウンドトリップで、NHリファレンスのMulriCriteriaとMultiQueriesを参照してください)。

また、遅延読み込みは非表示のdb取得であり、積極的な読み込みが適切な状況で遅延読み込みを使用すると、パフォーマンスに大きな影響を与える可能性があることを忘れないでください(たとえば、Foo.Bar.Nameでは常にBar.Name値が表示されます。 Fooエンティティを提示します)

パフォーマンスの低下は、リクエストあたり20〜30未満のデータベース呼び出しでも発生する可能性がありますが、エンティティ、クエリ、フィルターのサイズと複雑さ、および取得するデータセットのサイズによって異なります。

于 2010-07-19T09:20:38.177 に答える