Laravel ajax автозаполнение очень медленно - PullRequest
1 голос
/ 26 февраля 2020

У меня есть следующая функция jquery автозаполнения в моем приложении (https://github.com/devbridge/jQuery-Autocomplete)

Однако это очень медленно - рендеринг занимает почти 4 секунды. У меня установлена ​​панель отладки, и на временной шкале показано, что загрузка занимает почти 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 с php 7.4 на машине windows 10

Любые идеи, как я могу это настроить потому что в его нынешнем виде это не очень удобно?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Итак, я установил https://github.com/winnfsd/vagrant-winnfsd

$ vagrant plugin install vagrant-winnfsd

Обновлен Homestead.yaml следующим образом:

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

Выполнить

vagrant up --provision

Теперь загрузка была уменьшена до 500 мс

0 голосов
/ 26 февраля 2020

Небольшое улучшение может быть достигнуто путем ограничения записей и ограничения данных, которые вы выбираете, как показано ниже -

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

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

    return response()->json($locations);
}
  • Здесь, при условии, что вы предварительно заполняете только 10 записей для автозаполнения одновременно
  • И вам нужно только поле идентификатора и имени для предварительного заполнения

Это небольшой хак для извлечения меньшего количества данных, я надеюсь, что это улучшит производительность.

...