json запрашивается через Ajax: запросы выполняются очень быстро, но ответ возвращается очень медленно

#laravel #api #performance #nginx #laravel-8

#laravel #API #Производительность #nginx #laravel-8

Вопрос:

Обратите внимание на это введите описание изображения здесь

введите описание изображения здесь

Это один ajax-запрос.

Как вы можете видеть, я написал duration в результате, это продолжительность всех запросов, выполняемых в серверной части api.

Длина ответа 11 KByte равна, так что это не проблема веса ответа.

Но, как вы можете видеть, сервер обслуживает страницу 5 seconds .

Я использую nginx, и на этом сервере (это один проект dev VPS) нет трафика, нет проблем с параллелизмом.

Серверная часть создана в laravel 8 и выполняет только это:

     $start = microtime(true);
    $data = $this->articleRepository->getProducts($request->all());
    $duration = microtime(true) - $start;

    return response()->json([
        'status' => 'success',
        'data' => $data,
        'debug' => [
            'duration' => $duration
        ]
    ]);
 

Я попытался заменить laravel magics на

     $json = json_encode([
        'status' => 'success',
        'data' => $data,
        'debug' => [
            'duration' => $duration
        ]
    ]);

    return $json;
 

Но это занимает столько же времени. Поэтому я думаю, что это проблема на стороне сервера.

Кстати, обратите внимание, что dev VPS — это компьютер debian 11 в моей локальной сети. Мы уже проверили, что диапазон вверх / вниз значительно превышает 350 Мбит / с, симметричный и стабильный.

Я не могу это диагностировать, у меня есть root-доступ к VPS, но я понятия не имею, что может вызвать такую медлительность

Есть идеи?

Комментарии:

1. Laravel может быть ленивым при загрузке ваших $data моделей. Это означает, что они могут не запрашивать некоторые данные (например, другие модели, заданные как отношения), пока они не будут явно запрошены в коде, например, во время вашего ответа-> вызова json. Ознакомьтесь с Красноречивой нетерпеливой загрузкой в документах — laravel.com/docs/master/eloquent-relationships#eager-loading

2. Нет, я попытался повторить «Привет», но TTFB все еще> 4 секунд

Ответ №1:

В данном конкретном случае речь шла о DNS. разрешение «localhost» вызывает ряд проблем и задержек. Мы переместили все указания с ‘localhost’ на 127.0.0.1, и ВСЕ решено.

Примечание для будущих пользователей Google для разработчиков Laragon и / или Xamp: мы случайно обнаружили, что изменение localhost на 127.0.0.1 при настройке redis в переменной laravel .env устраняет огромные проблемы на компьютере с Windows при использовании как Laragon, так и Xamp