Laravel Медленный ответ запроса Ajax на метод контроллера, возвращающий данные JSON - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь выполнить запрос Ajax от просмотра к контроллеру, который возвращает JSON Данные. Все работает нормально, однако ответ Ajax слишком медленный.

Это мой Ajax Запрос в поле зрения:

$(document).on('keyup', '#search', function () {
    $("#phoneBody > tr").remove();
    var query = $(this).val().toLowerCase();
    var expression = new RegExp(query, "i");
    $.getJSON("phonetest/" + query, function (data) {
        $.each(data, function (key, value) {
            if (value.name.search(expression) != -1 ||
                value.extn.search(expression) != -1 ||
                value.mobile.search(expression) != -1 ||
                value.dept.search(expression) != -1 ||
                value.desig.search(expression) != -1 ||
                value.emp_cd.search(expression) != -1)
            {
                $('#phoneBody').append('<tr><td class="name">' + value.name +
                                       '</td><td class="extn">' + value.extn + '</td><td>' +
                                       value.email + '</td><td>' + value.voip + '</td><td>' +
                                       value.mobile + '</td><td>' + value.floor + '</td><td>' +
                                       value.dept + '</td><td>' + value.desig + '</td></tr>');
            }
        });
    });

});

Это мой метод управления:

public function phonetest(Request $request)
{
    if ($request->ajax()) {
        $crawler = Goutte::request('GET', "http://1.1.1.1/test.NSF/names?OpenView&count=2000");

        $emp_arr = $crawler->filter('tr')->each(function ($node) {
            $rec['name']   = $node->filter('a')->eq(0)->text();
            $rec['extn']   = $node->filter('td')->eq(1)->text();
            $rec['voip']   = $node->filter('td')->eq(2)->text();
            $rec['mobile'] = $node->filter('td')->eq(3)->text();
            $rec['floor']  = $node->filter('td')->eq(4)->text();
            $rec['dept']   = $node->filter('td')->eq(5)->text();
            $rec['desig']  = $node->filter('td')->eq(6)->text();
            $rec['emp_cd'] = $node->filter('td')->eq(7)->text();

            $email        = DB::table('employee1')
                ->where('emp1_code', $rec['emp_cd'])
                ->pluck('emp1_email_addr')
                ->first();
            $rec['email'] = strtolower($email);
            //dd($rec);

            return $rec;
        });
        $emp_arr = array_values(array_filter($emp_arr));

        return json_encode($emp_arr);
    }
}

Все отлично работает. Тем не менее, ответ слишком медленный. Это занимает буквально 1 секунду для каждого символа, который я печатаю. Как я могу улучшить то же самое?

Один из подходов заключается в создании начального массива при первой загрузке представления и последующем выполнении Ajax запросов к массиву.

Решено

Я включил JSON в сеанс при загрузке страницы. Последующие Ajax запросы обслуживаются из этого JSON, хранящегося в сеансе. Это работает на данный момент, и Ajax ответы очень быстрые. Будет отслеживать производительность с течением времени в случае, если JSON станет большим по размеру.

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