【问题标题】:jQuery datatables plugin too slow - need a replacementjQuery 数据表插件太慢 - 需要更换
【发布时间】: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 一起使用,因此最终在当前任何时候您都将在客户端处理一小部分行......

标签: php jquery datatables


【解决方案1】:

来自 DataTables 常见问题解答 (http://datatables.net/faqs#speed):

  • 客户端处理 - DOM 源数据:~5'000 行。速度选项:bSortClasses
  • 客户端处理 - Ajax 源数据:~50'000 行。速度选项:bDeferRender
  • 服务器端处理:数百万行。

如果您目前没有使用延迟渲染,对于您的 45'000 行,我肯定会建议您这样做。否则,对于 DataTables 选项,您可能需要查看 server-side processing

【讨论】:

    【解决方案2】:

    艾伦的回答很好;但要提到的另一件事(极大地影响加载时间)是将bProcessingbServerSide 设置为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" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多