【问题标题】:Ajax-based autocomplete in Laravel is too slowLaravel 中基于 Ajax 的自动完成功能太慢
【发布时间】:2019-10-04 03:04:19
【问题描述】:

我有一个在您键入时具有自动完成功能的表单。该功能很慢。平均打字速度比自动完成列表快。您可以在建议弹出之前完成输入。它使用 jQuery 对 URL 进行 ajax 调用,该 URL 调用控制器中的函数,然后运行包含类型化字符串的所有列表:

chrome 开发者工具中的网络选项卡只显示了被调用的 URL 花了多长时间以及大约 700 毫秒。


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'=>''];
    }

除了可能优化上述查询之外 - 我将如何检查花费最多时间的地方。我添加了一个与我从另一个论坛获得的完全相同的自动完成脚本的链接 http://www.expertphp.in/article/laravel-5-autocomplete-mutiple-fields-using-jquery-ajax-and-mysql

【问题讨论】:

  • small things $query1.'%' 更快,因为它会使用索引而不是全表扫描,如果你想制作结果数组,你可以这样做 ->get()->toArray( );但我认为你会希望你的结果在 json 中用于自动完成 ajax

标签: jquery ajax laravel eloquent


【解决方案1】:

您应该简单地用一些时间戳来注释您的代码。例如:

$start = microtime(true);
foreach ($c1 as $service) {
    $data[]=array('EmployeeService'=>$service->EmployeeService);
}
$time_elapsed_secs = microtime(true) - $start;

这会让你知道 foreach() 循环需要多少时间。

这是一个更完整的分析示例:https://stackoverflow.com/a/29022400/7578556

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2012-10-23
    • 1970-01-01
    • 2020-06-02
    • 2017-12-29
    • 2017-08-22
    相关资源
    最近更新 更多