大数据渲染问题

时间:2012-06-29 20:31:20

标签: c# .net asp.net-mvc large-data

在View中呈现大数据的最佳方法是什么?是按部分渲染它的某种方式吗?

Controller的动作产生大数据集(1000x1000矩阵)并将其返回到View。当我渲染它时,浏览器挂起。这些数据是由其他服务生成的,我不能用较小的部分来获取数据。

Matrix是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>

2 个答案:

答案 0 :(得分:1)

我猜这个大小的矩阵在页面上没有完整呈现,所以我的建议是通过附加到scroll事件来动态操作DOM,就像用户滚动一样。通过使用SlickGird作为数据呈现组件,使用书面自定义插件处理超过1k元素的自动完成下拉列表,这对我非常有用。浏览器处理大型数据集没有问题(我已经测试了多达400k的JS对象),但是在尝试显示它们时肯定会挂起。因此,只需渲染用户所在屏幕的一部分。

答案 1 :(得分:1)

您可以渲染一个空表并从服务器获取数据,以便使用ajax填充它。这样,您将下载布局和数据,但不会下载<tr><td></td></tr>内容。如果你做数学运算:

    每行
  • <tr></tr>为您提供9 * 1000 = 9000字节
  • <td></td>为每行中的每个单元格提供9 * 1000 * 1000 = 9000000字节
  • 总计:9009000

您可以减少大约9 MB的请求,这很多!

此外,您可以在服务器上打开GZip,以便数据移动压缩。