Php jQuery datatables插件太慢-需要更换
我已经使用jQuery大约两年了,到目前为止它工作得很好。现在,当我需要一次加载大约45000条记录时,出现了这个问题(您单击按钮并等待加载包含数据的页面)-加载时间太长,无法等待 以下是我使用Chrome web浏览器进行的测试(数据来自它的网络选项卡,使用): datatables插件已打开:Php jQuery datatables插件太慢-需要更换,php,jquery,datatables,Php,Jquery,Datatables,我已经使用jQuery大约两年了,到目前为止它工作得很好。现在,当我需要一次加载大约45000条记录时,出现了这个问题(您单击按钮并等待加载包含数据的页面)-加载时间太长,无法等待 以下是我使用Chrome web浏览器进行的测试(数据来自它的网络选项卡,使用): datatables插件已打开: 5476记录: 24个请求❘ 已传输256.26KB❘ 19.80s (onload:19.80s,domcontentload:18.58s) 45071记录: 34请求❘ 1.85MB已传输
5476记录:
24个请求❘ 已传输256.26KB❘ 19.80s
(onload:19.80s,domcontentload:18.58s)
45071记录:
34请求❘ 1.85MB已传输❘ 11.1分钟
(加载时间:11.1分钟,加载时间:11.0分钟)
datatables插件已关闭(jQuery datatables初始化完成):5476记录:
21个请求❘ 已传输255.84KB❘ 6.57s
(onload:13.26s,domcontentload:13.28s)
45071记录:31个请求❘ 1.84MB已传输❘ 2.0分钟
(加载时间:2.0分钟,加载时间:2.0分钟)
对于45k行,datatables的加载时间增加了80%,对于5k行,几乎增加了40%
所以我想知道你们是否知道有任何类似的插件可以更快地处理很多行(45000+),或者我只是想通过“一次过”加载所有45000+记录而忽略了要点
任何建议都将不胜感激 来自DataTables常见问题解答():
- 客户端处理-来自DOM的数据:~5000行。速度选项:bSortClasses
- 客户端处理—来自Ajax的数据:~50000行。速度选项:bDeferRender
- 服务器端处理:数百万行
如果您目前没有使用延迟渲染,对于45000行,我非常肯定地建议您这样做。否则,对于DataTables选项,您可能需要查看。Allan的回答很好;但另一件需要提及的事情(这会极大地影响加载时间)是将
b处理
和bServerSide
设置为true,如下代码所示:
$(document).ready(function() {
$('#example').dataTable( {
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "../examples_support/server_processing.php"
} );
} );
参考文献
我的代码加载需要15秒,现在大概需要1秒:)我发现浏览器插件也会降低DataTable的性能,这就是我的情况。工作台本身的加载时间从大约15秒变为2秒 其中之一是Skype工具栏,它会自动解析表中的数据,除非您告诉它不要这样做 对于大型表来说,这是一个问题。很多用户都有这个插件,它在不知不觉中减缓了他们加载大型表的速度 有一个很好的解决方案,将其添加到标题中。每个公开的DataTables网页都应包含以下内容:
<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />
我想说你没有抓住重点,45000行是一个巨大的数据集,需要在浏览器中处理。也许您应该考虑加载较小的数据视图和分页有什么理由需要一次加载这么多记录吗?这将大大降低任何速度…我认为时间延迟可能不是拉取数据,而是dom操作。你有没有考虑过优化你现有的jquery代码?@NicholasKing:这也是我的怀疑,这就是为什么我做了测试来证实这一点。对于优化-我真的不知道我可以对jQuery datatables调用做更多的优化,因为我只是用$('#示例').dataTable({“bJQueryUI”:true,“iDisplayLength”:50})来调用它`您是否使用服务器端处理?您可以将其用于分页,因此最终在当前任何时候,您都将处理客户端中的一小部分行。…b处理
不仅仅是在DataTables加载数据时显示消息的选项吗?它怎么能加快加载时间呢?并不是b处理
加快了加载速度;只有bServerSide
。这不正是艾伦所说的吗?