yajra / laravel-datatables,回复速度慢

时间:2018-09-27 02:27:13

标签: laravel

问题或功能请求摘要

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

如何优化数据加载?

当我不使用服务器时,速度要快得多。

首先,谢谢

问题的代码段

控制器

    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(); 

3 个答案:

答案 0 :(得分:1)

您正在使用服务器端获取表数据。不要调用 all(),因为它将获得全部。

替换:

$users = User::all();

使用:

$users = User::query();

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

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

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

答案 1 :(得分:0)

替换

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

与此:

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

这将使用一个数据库请求,而不是超过1000个请求(您正在为每个用户打电话以获取其角色)。如果您一次显示所有1300个用户,则只请求使用分页内置https://laravel.com/docs/5.6/pagination#paginating-eloquent-results

内置的laravel来请求所需的“页面”

答案 2 :(得分:0)

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

具有以下内容?

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

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

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