Php Laravel ajax自动完成速度非常慢

Php Laravel ajax自动完成速度非常慢,php,ajax,jquery-ui-autocomplete,laravel-6,Php,Ajax,Jquery Ui Autocomplete,Laravel 6,我的应用程序中有以下jquery自动完成功能() 但是它非常慢-渲染几乎需要4秒。我已经安装了debugbar,时间线显示启动几乎需要3秒,应用程序需要1秒,实际的数据库查询是44毫秒 这是我的jquery自动完成实现: window.locationAutoCompleteSettings = { serviceUrl: "/location-lookup", minChars: 2, paramName: "term", showNoSuggestionNot

我的应用程序中有以下jquery自动完成功能()

但是它非常慢-渲染几乎需要4秒。我已经安装了debugbar,时间线显示启动几乎需要3秒,应用程序需要1秒,实际的数据库查询是44毫秒

这是我的jquery自动完成实现:

window.locationAutoCompleteSettings = {
    serviceUrl: "/location-lookup",
    minChars: 2,
    paramName: "term",
    showNoSuggestionNotice: false,
    onSearchStart: function (query) {
        $(this).closest(".js-clear-input").find(".js-clear-input-trigger").addClass("clear-input-spinner")
    },
    onSearchComplete: function (query) {
        $(this).closest(".js-clear-input").find(".js-clear-input-trigger").removeClass("clear-input-spinner")
    },
    transformResult: function (response) {
        var data = JSON.parse(response);
        return {
            suggestions: $.map(data, function (item) {
                return {
                    value: item.name,
                    data: item.id
                }
            })
        };
    },
    onSelect: function (suggestion) {
        var e = $(this).closest(".js-lookup-container").find(".js-location-id");
        e.val(suggestion.data);
        var f = suggestion.value, b = $(".js-location-description");
        if (b.length && b.val() == "") {
            b.val(f).trigger("change")
        }

    }
};

$(".js-location-lookup").autocomplete(window.locationAutoCompleteSettings);
这是我的控制器方法:

public function locationLookup(Request $request)
{
    $term = $request->input('term');

    $locations = $this->locationRepository->getByName($term)->get();

    return response()->json($locations);
}
为了记录在案,我在Homestead上运行这个,在Windows10机器上运行PHP7.4


你知道我该如何调整它吗?因为目前它不是很有用吗?

可以通过限制记录和限制你正在获取的数据来做一些小的改进,如下所示-

public function locationLookup(Request $request)
{
    $term = $request->input('term');

    $locations = $this->locationRepository->getByName($term)->take(10)->get(['id', 'name']);

    return response()->json($locations);
}
  • 这里假设您一次只为autosuggest预填充10条记录
  • 您只需要id&name字段就可以进行预填充

获取较少的数据量是一个小技巧,我希望它能提高一些性能

通过限制记录和限制正在获取的数据,可以做一些小的改进,如下所示-

public function locationLookup(Request $request)
{
    $term = $request->input('term');

    $locations = $this->locationRepository->getByName($term)->take(10)->get(['id', 'name']);

    return response()->json($locations);
}
  • 这里假设您一次只为autosuggest预填充10条记录
  • 您只需要id&name字段就可以进行预填充
获取较少的数据量是一个小技巧,我希望它能提高一些性能

所以我安装了

将Homestead.yaml更新如下:

folders:
- map: ~/code/project1
  to: /home/vagrant/project1
  type: "nfs"

现在启动时间已经降低到500毫秒,所以我安装了

将Homestead.yaml更新如下:

folders:
- map: ~/code/project1
  to: /home/vagrant/project1
  type: "nfs"


现在引导时间已降低到500毫秒

另一种方法是使用原始查询(数据库查询生成器)而不是雄辩的查询生成器。另外,这可能是操作系统性能问题或服务器问题(Apache/Nginx),因为引导时间3秒太长。db query也可以。应用程序启动时间太长,可能是服务器(Apache/Nginx)出现了一些与网络相关的问题。请检查日志。或者尝试使用WAMP服务器运行。另一种方法是使用原始查询(数据库查询生成器)而不是雄辩的查询生成器。另外,可能是操作系统性能问题或服务器问题(Apache/Nginx),因为启动时间3s太长。db query可以。应用程序启动时间太长,可能是服务器(Apache/Nginx)出现了一些与网络相关的问题。请检查日志。或者尝试使用WAMP服务器运行。