0

在视图中呈现大数据的最佳方式是什么?是按部分呈现它的某种方式吗?

控制器的动作产生大数据集(1000x1000 矩阵)并将其返回给 View。当我渲染它时,浏览器挂起。数据是由其他服务生成的,我无法以较小的部分获得它。

矩阵是 INT 值的二维数组。

控制器代码:

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作为数据渲染组件,使用编写的自定义插件来处理超过 1k 个元素的自动完成下拉列表,这对我来说非常棒。浏览器在处理大型数据集方面没有问题(我已经测试了多达 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 回答