Я пытаюсь выполнить запрос 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 станет большим по размеру.