jQuery 数据表插件太慢 - 需要更换
Posted
技术标签:
【中文标题】jQuery 数据表插件太慢 - 需要更换【英文标题】:jQuery datatables plugin too slow - need a replacement 【发布时间】:2012-07-23 16:28:51 【问题描述】:我已经使用 jQuery datatables plugin 大约两年了,到目前为止效果很好。当我需要一次加载大约 45000 条记录时(您单击按钮并等待加载数据的页面),现在出现了问题 - 加载时间太长,无法等待。
这是我使用 Chrome 网络浏览器进行的测试(数据来自它的网络选项卡使用):
数据表插件已打开:5476 条记录:24 requests ❘ 256.26KB transferred ❘ 19.80s
(onload: 19.80s, DOMContentLoaded: 18.58s)
45071 条记录:34 requests ❘ 1.85MB transferred ❘ 11.1min
(onload: 11.1min, DOMContentLoaded: 11.0min)
数据表插件关闭(jQuery 数据表初始化被注释掉):5476 条记录:21 requests ❘ 255.84KB transferred ❘ 6.57s
(onload: 13.26s, DOMContentLoaded: 13.28s)
45071 条记录:31 requests ❘ 1.84MB transferred ❘ 2.0min
(onload: 2.0min, DOMContentLoaded: 2.0min)
45k 行数据表加载时间增加超过80%,5k 行几乎40%。
所以我想知道你们是否知道任何类似的插件可以更快地处理很多行(45000+),或者我只是试图“一次性”加载所有 45000+ 记录而错过了重点?
欢迎提出任何建议!
【问题讨论】:
我想说你没有抓住重点,45000 行是一个巨大的数据集,需要在浏览器中处理。也许您应该考虑加载较小的数据视图并进行分页 您是否有任何理由需要一次加载那么多记录?这几乎会减慢任何速度...... 我建议时间延迟可能不是拉数据,而是 dom 操作。您是否考虑过优化现有的 jquery 代码? @NicholasKing:这也是我的怀疑,这就是为什么我进行了证实这一点的测试。对于优化 - 我真的不知道我还能对 jQuery 数据表调用做哪些优化,因为我只是通过 $('#example').dataTable( "bJQueryUI": true, "iDisplayLength": 50 );` 你使用服务器Server side processing
吗?您可以将它与 pagination 一起使用,因此最终在当前任何时候您都将在客户端处理一小部分行......
【参考方案1】:
来自 DataTables 常见问题解答 (http://datatables.net/faqs#speed):
客户端处理 - DOM 源数据:~5'000 行。速度选项:bSortClasses 客户端处理 - Ajax 源数据:~50'000 行。速度选项:bDeferRender 服务器端处理:数百万行。如果您目前没有使用延迟渲染,对于您的 45'000 行,我肯定会建议您这样做。否则,对于 DataTables 选项,您可能需要查看 server-side processing。
【讨论】:
【参考方案2】:艾伦的回答很好;但要提到的另一件事(极大地影响加载时间)是将bProcessing
和bServerSide
设置为true,如下面的代码所示:
$(document).ready(function()
$('#example').dataTable(
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "../examples_support/server_processing.php"
);
);
参考。 http://datatables.net/examples/data_sources/server_side.html
我的代码加载需要 15 秒,现在大约需要 1 秒 :)
【讨论】:
bProcessing
不只是在 DataTables 加载数据时显示消息的选项吗?它如何加快加载时间?
加速它的不是bProcessing
;只是bServerSide
。
艾伦说的不就是这样吗?【参考方案3】:
我发现浏览器插件也会降低 DataTable 的性能,这就是我的情况。表格本身的加载时间从大约 15 秒变为 2 秒。
其中之一是 Skype 工具栏,它会自动解析表格中的数据,除非您告诉它不要这样做。
这对于大表来说是个问题。很多用户都有这个插件,它在不知不觉中减慢了他们加载大表的速度。
对此有一个很好的解决方案,将其添加到标题中。每个公开的 DataTables 网页都应包含以下内容:
<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />
【讨论】:
以上是关于jQuery 数据表插件太慢 - 需要更换的主要内容,如果未能解决你的问题,请参考以下文章
08.01《jQuery》——cookie插件的简单应用和自己写的简单更换颜色插件