Laravel-datatables: 对于大量行,数据加载非常慢。

创建于 2017-03-08  ·  14评论  ·  资料来源: yajra/laravel-datatables

问题或功能请求的摘要


我尝试使用 Laravel 实现 Datatable,但是当我的表有大量行时我遇到了问题,因为 Datatable 在一个请求中获取 ALL,然后分页在 JS 端。 我可以使用 Laravel 分页,还是可以使用 Eloquent on ajax 方法中的paginate()方法返回分页行? 因为这对我的项目来说是个大问题。 数据加载非常缓慢。 当我搜索时,一些文字处理也很慢,并且在sortsearch等操作之后页面冻结并且没有任何反应。
我希望有人有同样的问题。

问题代码片段

                serverSide: true,
                processing: true,
                render: true,
                columns: [
                    {data: 'code'},
                    {data: 'name', "defaultContent": "<i>Not set</i>"},
                    {data: 'native_name',  "defaultContent": "<i>Not set</i>"},
                    {data: 'action'}
                ],
                ajax: '{!! route('dt-languages') !!}'

系统详情

  • 操作系统 Linux
  • PHP 版本 7.0.4
  • Laravel 5.4 版
  • Laravel 数据表 7.2 版

最有用的评论

您需要删除 get 才能使用查询生成器。

return $this->languages->select('languages.*');

所有14条评论

您可能正在使用集合而不是查询? 你能粘贴你的服务器端代码吗? 谢谢!

我使用存储库模式,在我的 LanguageRepository.php 中我有:
return $this->languages->select('languages.*')->get();

您需要删除 get 才能使用查询生成器。

return $this->languages->select('languages.*');

好的。 现在看起来好多了。 我会再次测试它并写下我的结果。
但与此同时,还有一个问题。 当我尝试搜索某个单词时,我收到此错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'languages.action' in 'where clause' (SQL: select count(*) as aggregate from (select '1' as `row_count` from `languages` where (LOWER(`languages`.`name`) LIKE %m% count_row_table)

将操作设置为不可搜索/可订购,因为它已添加列。

非常感谢! @yajra
当我完成测试后,我会将结果发送给您

我的测试结果:

第一个查询:
select count(*) as aggregate from (select '1' as row_count from languages where languages.deleted_at is null and languages.deleted_at is null) count_row_table -> 3.64 毫秒

第二个查询:
select languages.* from languages where languages.deleted_at is null order by code asc limit 10 offset 0 -> 1.05 毫秒

再次感谢@yajra的帮助。

很高兴我能提供帮助! 谢谢!

我正遭受这个问题的困扰。 渲染缓慢。 我的服务器端查询。

 $products = DB::connection("mysql2")->table('products')->
        join('products_description', 'products.products_id', '=', 'products_description.products_id')
            ->select(['products.products_id', 'products_description.products_name', 'products.products_isbn13', 'products.products_distributor', 'products.products_price', 'products.products_status']);
 return Datatables::of($products)->make(true);

帮我。 我应该编写自己的脚本来分页吗? 我该怎么办?
我有超过 4,000,000 种产品的记录。
@yajra非常感谢您帮助我。

我也有这个,可能是数据表请求没有将分页参数链接到查询?

@pnghai我如何检查它?

@hsali对不起。 虚惊。 原来我的逻辑涉及远程图像获取,它链接到死胡同服务器并强制每条记录获取错误的 404 连接,占用记录数 * 60(超时前的秒数)。 我暂停了这种逻辑,现在一切都很好。

非常感谢
(p/s:pnghai nick 是我自己的另一个 github 帐户)

@pnghai我如何检查它?

你能解决这个问题吗? 如果是,如何?

对于加载缓慢的任何人,您的控制器函数中可能有某种循环,以某种方式循环获取的记录。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

jackrsantana picture jackrsantana  ·  3评论

kamrava picture kamrava  ·  3评论

nasirkhan picture nasirkhan  ·  3评论

SGarridoDev picture SGarridoDev  ·  3评论

hohuuhau picture hohuuhau  ·  3评论