0

ビューで大きなデータをレンダリングする最良の方法は何ですか? 部分的にレンダリングする方法はありますか?

コントローラーのアクションは、大きなデータ セット (1000x1000 マトリックス) を生成し、ビューに返します。レンダリングすると、ブラウザがハングします。データは他のサービスによって生成されたもので、小さな部分では取得できません。

Matrix は INT 値の 2 次元配列です。

コントローラーコード:

public ActionResult GetData()
{
    var result = ThirdPartyService.GetData();

    return View(result);
}

コードを表示:

<table>             
        <% foreach (var x = 0; x < Model.Matrix.Count; x++) { %>
            <tr>
        <% foreach (var y = 0; y < Model.Matrix[x].Count; y++) { %>
            <td><% = Model.Matrix[x, y] %></td>
        <% } %>
        </tr>
    <% } %>
</table>
4

2 に答える 2

1

そのサイズのマトリックスはページ全体に表示されないので、スクロールイベントにアタッチすることで、ユーザーがスクロールするときにDOMを動的に操作することをお勧めします。これは、SlickGirdをデータレンダリングコンポーネントとして使用し、1,000を超える要素を含むオートコンプリートドロップダウンを処理するカスタムプラグインを作成することで、非常に驚​​くべき効果を発揮しました。ブラウザは大きなデータセット(最大400kのJSオブジェクトをテストしました)の処理に問題はありませんが、それらを表示しようとすると確実にハングします。したがって、ユーザーが配置されている画面の部分をレンダリングするだけです。

于 2012-06-29T20:40:33.070 に答える
1

空のテーブルをレンダリングし、ajax を使用してデータを入力するためにサーバーからデータを取得できます。この方法では、レイアウトとデータはダウンロードされますが、<tr><td></td></tr>コンテンツはダウンロードされません。計算すると:

  • <tr></tr>各行に対して 9*1000 = 9000 バイトが得られます
  • <td></td>各行の各セルに対して、9*1000*1000 = 9000000 バイトが得られます
  • 合計: 9009000

リクエストから約 9 MB を削減できます。

また、サーバーで GZip を有効にして、データを圧縮して移動することもできます。

于 2012-06-30T06:44:57.773 に答える