性能问题渲染大表

时间:2014-04-07 07:01:13

标签: javascript jquery performance jquery-datatables

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

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

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

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

有人知道如何应用相同的技巧"水平" ?只将可见列包含在DOM中?

更新

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

Why does SO need code ?

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

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

To"模拟"在服务器上,DT设置对象被转换为字符串,然后返回到JSON对象。然后才送到DT。

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

4 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

可能适合你。

答案 3 :(得分:0)

由于您有很多专栏,table-layout: fixed可能会有所帮助。

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