性能问题渲染大表

我正在尝试使用html表来显示大量数据。 在我的例子中,一个260列和117行的矩阵。

jQuery / Ajax用于获取数据。 和DataTables + Scroller展示这一切。 浏览器会冻结几秒钟以呈现所有内容。 我认为这是正常的 – 关于javascript的单线程性质。

不幸的是,一旦渲染,浏览器仍然有问题。 反应变得非常缓慢。 调整窗口大小,弹出开发工具等等…可以推测,因为它再次运行渲染过程? 或者内存消耗可能会通过屋顶? 我没有线索。

使用Scroller是因为还有更多行。 它适用于适当数量的列,效果很好。 它只提取并显示可见行。 在实践中,行没有限制。 唉,这不是列的情况。 他们总是包括在内。

有人知道如何“横向”应用相同的技巧吗? 只将可见列包含在DOM中?

UPDATE

我在JSFiddle上准备了一个例子: url to code

Why does SO need code ? 

首先按“添加大表”,然后按“填充表”。 等待几秒钟才能看到表格。 花费的时间也会显示出来。 “渲染”时间基本上是DT呼叫的持续时间。 “构建”时间是创建整个事物所花费的时间 – 除了调用DT。

结果的样式并不是我们在这里所拥有的 – 但预期的结果是:显示它需要4 / 5s才能呈现它。 我不是JS / CSS / …大师; 因此,我呼吁帮助找出正在发生的事情。

要“模拟”服务器,DT设置对象将转换为字符串,然后再转换为JSON对象。 然后才送到DT。

有什么明显的东西我可以尝试让这个过程更快吗?

数据表插件是如此响应,因为它首先尝试加载所有数据,然后您可以根据需要进行排序/搜索。在大型数据集的情况下,我们能够和应该做的是加载尽可能多的数据,可以在一个视图中处理然后点击链接或按钮加载下一个视图。 对于大量行,实现页面是相当明显的。 [对于那些使用LINQ的人来说,这可以通过使用Skip(pagesize(n))和Take(pagesize)来完成。

这称为分页 ,可以通过jQuery数据表API自动启用。 这与服务器端处理一起将极大地提高任何jQuery数据表的性能。

对于大量列,还只加载适合您视图的10列,然后显示一个链接以加载更多列。 单击链接后,加载下10列。 记下点击次数,这将有助于您了解要跳过的列数。

有关服务器端处理的更多信息,请参阅http://datatables.net/release-datatables/examples/data_sources/server_side.html

对于大型数据集,我发现自己被迫使用divs而不是表格标记。

浏览器可以更好地处理这些问题的几个原因,主要是整个表需要在渲染之前进行计算。

首先在将数据放入表中后隐藏页面,然后使用setTimeout函数显示它。 我不知道它会在您的应用程序中运行,但它在我的应用程序中工作..

 $("yourId").hide(); setTimeout(function(){ $("yourId").show(); },10), 

可能会对你有用。

由于你有很多列, table-layout: fixed可能会有所帮助。

http://www.w3schools.com/cssref/pr_tab_table-layout.asp