【问题标题】:Impoving Ajax request performence to load millions of records in DataTable提高 Ajax 请求性能以在 DataTable 中加载数百万条记录
【发布时间】:2019-08-06 10:41:50
【问题描述】:

如何改进在单个表中加载超过 2500 万行。我有一个数据表实现,它需要这种类型的强制。我已经有了 laravel 的其他解决方案。 但这是否可以提高我的 ajax 请求性能,以便我的表可以在 30-40 秒内加载数据?

我的 DataTable 正在使用 ajax 调用 https://datatables.net/reference/option/ajax 加载数据

【问题讨论】:

  • 如果您在 30 秒内在数据表中加载 2500 万行,听起来性能已经相当惊人了。但是,要使这些数据量在 UI 中实际可用,您应该考虑实现分页、过滤和排序。如果您需要更具体的帮助来实现这一点,请在问题中添加有关您当前逻辑的更多详细信息
  • 目前您使用 php 循环或基于 json 的方式获取数据?
  • 不要。句号,只是不要。浏览器不是为 OLAP 设计的,尝试在浏览器中获取这么多数据只是浪费时间,并且可能会导致最终用户的机器崩溃(这可能会比开发机器的规格更低)。相反,实现服务器端排序/分页/等 - 当您使用数据表时:datatables.net/manual/server-side
  • 如果您尝试加载百万记录浏览器不支持表中的那么多记录。这就是为什么REFERENCE 检查这个 stackoverflow 问题。
  • @RoryMcCrossan 感谢您的建议。我已经调查过了,所有这些都没有任何帮助。

标签: jquery ajax laravel datatable


【解决方案1】:

您不应该一次加载所有这些记录。这将非常缓慢,您对此无能为力。

解决方案是实现Server-side processing。这样,您可以在服务器端修改数据库查询,以仅加载应显示的记录。
Laravel 已经有几个包可以为你构建这些查询。例如:yajra/laravel-datatables

【讨论】:

  • 我的数据分几块加载。服务器端处理在这里没有帮助,因为我已经给了我的用户导出按钮,当我启用服务器端处理时它也不起作用。关于 Laravel Yajra 包。如果我在这里没有得到任何有用的解决方案,我有最后一个选择。
  • @divyamohan kashyap:我相信,您可以调整服务器端逻辑以根据请求的行从适当的块中提供 DataTable。仅仅为了加载条目而暂停您的应用程序很长时间确实没有意义,因为用户无法一次看到、理解或处理这些条目。从这个角度来看,serverSide: true 是最佳解决方案。至于您的导出,您可以使用自己的覆盖嵌入式 DataTables 导出工具,例如,在单击“导出”按钮时,您将抛出一个 ajax 调用并使用在服务器端准备好的文档进行响应。
猜你喜欢
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
相关资源
最近更新 更多