yajra / laravel-datatables, Ответить Медленно - PullRequest
0 голосов
/ 27 сентября 2018

Сводная информация о проблеме или запросе функции

Ответ на запрос данных о загрузке очень медленный, между 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 голосов
/ 27 сентября 2018
$users = User::all();
$users->each(function ($users)
{
    $users->role;
});

с этим следующим?

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

Datatable добавляет параметры разбивки на страницы автоматически.если вы используете all(), он вызывает все данные из таблицы.

Другое дело, проверяли ли вы, что для получения данных с сервера требуется 2 / 3сек или требуется время для форматирования данных в представлении?

0 голосов
/ 27 сентября 2018

Вы используете серверную часть для получения данных таблицы.Не звоните all () , так как он получит все.

Заменить:

$users = User::all();

На:

$users = User::query();

Отображает только необходимые данные на странице таблицы данных.

И, не делайтеиспользовать цикл, чтобы получить роль.Используйте энергичную загрузку, используя с ();

$users = User::query()->with('role');
0 голосов
/ 27 сентября 2018

замените

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

на это:

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

Это будет использовать один запрос БД вместо более чем 1 КБ запросов (вы звонили каждому пользователю, чтобы получить его роль),Если вы одновременно отображаете всех 1300 пользователей, запрашивайте только нужную вам «страницу» с помощью встроенных пагинаций, https://laravel.com/docs/5.6/pagination#paginating-eloquent-results

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...