【问题标题】:yajra/laravel-datatables, Reply Slowyajra/laravel-datatables,回复慢
【发布时间】:2019-03-02 20:51:41
【问题描述】:

问题或功能请求摘要

加载数据表的回复很慢,在3-5seg之间

如何优化数据加载?

当我不使用里面的服务器时,它的速度要快得多..

首先,谢谢

问题的代码sn-p

控制器

    public function list_user(){
    $users = User::all();
    $users->each(function ($users)
    {
        $users->role;
    });
    return datatables()->collection($users)->toJson();
    }

Js

function activar_tabla_users() {
$('#DataTableUser').DataTable({
    "processing" : true,
    "serverSide" : true,
    "searchDelay" : 500,
    "responsive": {
        orthogonal: 'responsive'
    },
    "language": {
        "url": '{!! asset('/plugins/datatables.net/latino.json') !!}'
    } ,
    "lengthMenu": [5,10, 25, 50, 75 ],
    "ajax":'{!! url('admin/list_user') !!}',
    columns: [
        {data: 'id' },
        {data: 'username'},
        {data: 'name',
            render: function (data, type, row, meta) {
                return row.name + ' ' + row.lastname;
            } 
        },
        {data: 'email'},
        {data: 'role.name',
            render: function(data, type, row, meta) {
            var html = ''
            if ( row.role.name == 'Administrador' )
            {
                html = '<span class="label label-danger" > <label style="width:80px;"> '+row.role.name+' </label></span>';

            }else {
                html = '<span class="label label-primary" > <label style="width:80px;"> '+row.role.name+' </label></span>';
            }
            return html;
            }
        }
        }],

});
}
activar_tabla_users(); 

【问题讨论】:

  • 有多少用户?为什么你在用户上调用角色但什么都不做? $user-&gt;role
  • 对不起,我有 1300 个注册,只有两个角色:会员和管理员
  • 就在这一行。 {数据:'role.name',我使用关系角色

标签: laravel


【解决方案1】:

您正在使用服务器端获取表数据。不要调用 all() 因为它会得到所有。

替换:

$users = User::all();

与:

$users = User::query();

这只会在数据表页面中呈现所需的数据。

而且,不要使用循环来获取角色。使用 with();

使用预先加载
$users = User::query()->with('role');

【讨论】:

    【解决方案2】:
    $users = User::all();
    $users->each(function ($users)
    {
        $users->role;
    });
    

    下面这个?

    $users = User::with('role');
    

    Datatable 自动添加分页选项。如果您使用all(),它会调用表中的所有数据。

    另一件事是您是否检查过从服务器获取数据需要 2/3 秒,还是需要这段时间来格式化视图中的数据?

    【讨论】:

      【解决方案3】:

      替换

      $users = User::all();
      $users->each(function ($users)
      {
          $users->role;
      });
      

      用这个:

      $users = User::with('role')->get();
      

      这将使用一个 db 请求而不是超过 1k 个请求(您正在为每个用户进行调用以获取他们的角色)。如果你一次显示所有 1300 个用户,只请求你需要的“页面”,使用 laravel 内置的分页,https://laravel.com/docs/5.6/pagination#paginating-eloquent-results

      【讨论】:

      • 谢谢,但是还是很慢,大约 2 段
      • 分页不是问题,问题是,我重新充电页面,延迟是3 seg,如果改变分页中的netx slide也是3 seg
      • 您没有从数据库中获得分页结果,而是请求所有 1300 个,然后将它们分解并在浏览器中使用 javascript 对其进行分页
      • 但是,数据表有自动分页我显示“lengthMenu”:[5,10,25,50,75],并生成268张幻灯片
      • 它使用您提供的所有 1300 个用户生成 268 张幻灯片,如果您想要更好的性能,您需要使用 Laravel 从后端分页并使用可以处理后端分页的数据表
      猜你喜欢
      • 2021-12-04
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 2018-03-23
      • 2020-04-26
      • 2018-08-15
      • 2016-03-07
      相关资源
      最近更新 更多