自分がデザインしているウェブサイト全体で何度も繰り返さなければならないパターンのデザインソリューションを探しています。これはASP.NETMVCフロントエンドになり、C#WCFWebサービスがNHibernateを使用してSQLデータベースに接続します。
これはソーシャルネットワーキングサイトなので、ここでFacebookを想像して概念的なアイデアを入手してください。私が探しているのは、大規模なデータセットのページ化された結果を返すための効率的でパフォーマンスの高い方法です。たとえば、ユーザーが150通の電子メールを持っている場合があります。表示されているページに応じて一度に10個を返したいのですが、ユーザーエクスペリエンスのように、150個のアイテムすべてをメモリにロードして、一度に10個だけを表示するのではなく、明らかにページに関連する10個だけを返します。初期読み込みを高速化する場合と比較して、ページ変更の遅延を少し長くすることをお勧めします。結局のところ、6か月前のメールはいつ見ますか?通常のケースでは、とにかく結果の最初のページだけを気にします。同様に、ユーザーは最後のログイン以降に多くのインタラクションを経験している可能性があります(たとえば、Facebookの通知フィード)が、一度にn個の結果のみをロードしたいのですが、この場合、ページを表示するのではなく、 [さらに表示]ボタンをクリックすると、次のN個の結果が取得され、別の[さらに表示]リンクで表示されます。データセットの最後に到達するまでクリックし続けることができます。技術的には両方ともページ化された結果であり、UI出力とフローが異なるだけなので、どちらも同じデザインを使用すると想像できます。リンクなどは、データセットの最後に到達するまでクリックし続けることができます。技術的には両方ともページ化された結果であり、UI出力とフローが異なるだけなので、どちらも同じデザインを使用すると想像できます。リンクなどは、データセットの最後に到達するまでクリックし続けることができます。技術的には両方ともページ化された結果であり、UI出力とフローが異なるだけなので、どちらも同じデザインを使用すると想像できます。
私のデータ検索がNHibernateQueryableまたはEnumerablesを使用していることを念頭に置いて、誰かがこれに使用するための優れた設計についてアドバイスを提供できますか?DBからすべてのデータを1回のヒットでロードし、インターレーターパターンを使用して、サービスレイヤーからN行のみを返し、サーバー上のメモリに保持されている残りのリストをユーザーセッションコンテキストで開いたままにします。次のN行を取得する別の呼び出しでは、その場所に保持され、イテレータが終了するまでN行を返し続けます。または、データベースからN行を取得して、セッションコンテキストで何も保持せずに、それらを返すのが最善でしょうか。Queryableから上位10件の結果を返す方法を次のように確認できます。
var results = (from email in emails where email.UserId = userId).Take(10);
しかし、これがどれほど効率的かはわかりませんが、これが最速の方法ですか?さらに、特定の位置から開始する方法がわかりません。これは常に最初の10のみを返し、2番目の10、3番目の10などは返しません。
ですから、私は先に進むための最善の方法がどのようにあるのか少しわかりません。そして、似たようなことをした人々からのいくつかの指針とアドバイスを期待していました。私のウェブサイトのパフォーマンスを念頭に置くことが重要になるので、ユーザーエクスペリエンスは非常にシャープでインタラクティブで、新しい結果を更新する必要があります。基本的に、Facebookのニュースフィード/ウォールをシミュレートしようとした場合、上記のアーキテクチャでどのように実装しますか?
ありがとう!