问题或功能请求摘要
加载数据表的回复非常慢,在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();
答案 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秒的时间,还是需要花费时间在视图中格式化数据?