Jquery Laravel中基于Ajax的自动完成太慢
我有一个表单,在您键入时具有自动完成功能。这个功能很慢。平均打字速度比自动完成列表快。你可以在建议出来之前完成打字。它使用jQuery访问并对URL进行ajax调用,该URL调用控制器中的函数,然后运行包含键入字符串的所有列表: chrome开发者工具中的“网络”选项卡只显示了调用URL所需的时间和大约700msJquery Laravel中基于Ajax的自动完成太慢,jquery,ajax,laravel,eloquent,Jquery,Ajax,Laravel,Eloquent,我有一个表单,在您键入时具有自动完成功能。这个功能很慢。平均打字速度比自动完成列表快。你可以在建议出来之前完成打字。它使用jQuery访问并对URL进行ajax调用,该URL调用控制器中的函数,然后运行包含键入字符串的所有列表: chrome开发者工具中的“网络”选项卡只显示了调用URL所需的时间和大约700ms public function searchResponse(Request $request){ $query1 = $request->get('term'
public function searchResponse(Request $request){
$query1 = $request->get('term','');
$c1=\DB::table('T_EMPLOYEE_SERVICE_AREAS');
if($request->type=='EmpService')
{
$c1->where('EmployeeService','LIKE','%'.$query1.'%')
->groupBy('EmployeeService')
->get();
}
$c1=$c1->get();
$data=array();
foreach ($c1 as $service) {
$data[]=array('EmployeeService'=>$service->EmployeeService);
}
if(count($data))
return $data;
else
return ['EmployeeService'=>''];
}
除了优化上面的查询之外,我应该如何检查在哪里花费的时间最多。我添加了一个与我从另一个论坛获得的自动完成脚本完全相同的链接
您只需在代码上添加一些时间戳即可。例如:
$start = microtime(true);
foreach ($c1 as $service) {
$data[]=array('EmployeeService'=>$service->EmployeeService);
}
$time_elapsed_secs = microtime(true) - $start;
这将让您了解foreach循环需要多少时间
下面是一个更完整的评测示例:small things$query1.“%”速度更快,因为如果您想创建可以执行的结果数组->get->toArray,它也将使用索引而不是全表扫描;但我认为您希望您的结果在json中用于自动完成ajax