1

私が取り組んでいるアプリには、医師の検索リストがあります。これは ID を受け取る単純なフォーム フィールドであり、このルックアップにより、ユーザーは医師のリスト全体を表示し、医師をフィールドに追加できます。コントローラーにリストをロードしてから、データがテーブルにフォーマットされているビューにリストを返します。

<div id="physicians-selection-dialog">
    <table id="list">
    <thead>
        <tr>
            <td>#</td>
            <td>First Name</td>
            <td>Last Name</td>
            <td>Department</td>
            <td>State Lic</td>
        </tr>
    </thead>
    <tbody>
    @foreach (var physician in Model.Physicians)
    {
        <tr><td><button class="list-select" value="@physician.PhysFxId">@physician.PhysFxId</button></td><td>@physician.PhysFirstName</td><td>@physician.PhysLastName</td><td>@physician.PhysDepartment</td><td>@physician.PhysStateLic</td></tr>
    }
    </tbody>
    </table>
</div>

ユーザーは、5,000 人の医師全員について、上記の html を含む jQuery ダイアログを表示するリンクをクリックします。これは問題なく動作しますが、レンダリングが非常に遅くなります。パフォーマンスを向上させる必要がありますが、どうすればよいかわかりません。

  1. ビューがロードされるたびに 5k オブジェクトをロードし続ける必要がないように、医師リストをキャッシュする必要がありますか? そのリストはDBからロードされています。このリストはまったく、またはめったに変更されないため、心配する必要はありません。
  2. HTML出力をキャッシュする方法はありますか?
  3. データをページ分割しますが、トップダウン リストが必要だと思います。[次へ] をクリックし続けるよりも、スクロールする方が速くなります。

ここでパフォーマンスを向上させるにはどうすればよいですか?

4

1 に答える 1

13

実際にすべきことは、最初にデータベースから必要な医師だけを取得することです。5000 項目のリストは無意味です。誰もそれを見ようとはしません。

ページ番号、ページ サイズ、並べ替え条件などをストアド プロシージャまたはデータ レイヤー メソッドに渡すページング システムを実装できます。このメソッドは、DB から該当するアイテムのみを取得します。このようにして、DB の処理時間、ネットワーク転送時間、ビジネス オブジェクトの作成時間、およびレンダリング時間を節約できます。

于 2012-11-13T14:46:36.627 に答える