Задать вопрос
@66demon666
Сетевой админ, АТС-админ

Почему так долго отвечает API?

Здравствуйте. На данный момент api делается на локальной средней мощности машине. Для добавления user (регистрации то бишь) использую ту же модель RegisterUser, что и на сайте. В итоге метод выглядит так:
public function actionCreate()
    {
        Yii::$app->response->format = Response::FORMAT_JSON;
        $data=(array)json_decode(Yii::$app->getRequest()->getRawBody());
        $newUser=new RegisterForm();
        $newUser->attributes=$data;
          $registerResult=$newUser->register();
  /*В методе register возвращается помимо true/false id созданного пользователя, поэтому массив*/
          if ($registerResult["success"]) {                                      
            Yii::$app->response->statusCode = 201;
            Yii::$app->response->headers->add("Location","/api/user/".$registerResult["id"]);
            return "";
          }
        else {
          Yii::$app->response->statusCode = 409;
          return $newUser->errors;
        }
      }


Вроде максимально просто, но даже в случае с ошибкой, когда модель не проходит валидацию и возвращается 409, запрос занимает 200-300 ms что, мне кажется, много, потому что я читал, что хорошо если около 50 ms. В чем может быть узкое место?
  • Вопрос задан
  • 204 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
1. Это весь код, который используется? Покажите что у вас в форме метода register? Может там цикл какой-нибудь сложный - никто же не догадывается.

2. Где у вас начинает тормозить? На production? Тогда проблема, скорее всего в самом сервере. Может быть какие-то подводные камни. Например, версия php, mysql. Сравните конфигурацию локальной Настройки и продакшн. Например, если на локальном использовать php7.2, а на продакшн php5.6, то разница очень большая в скорости. Но это вряд ли, конечено. Так же посмотрите включён ли OPCache. В общем тут нюансов много

Обновите пакеты на продакшн сервере. composer update —no-dev. Эта команда отключит пакеты, которые нужны для разработки (тесты, Фиксиктуры). Не особо должно влиять, но работа будет чуть побыстрее.

Ещё проверьте стоит ли на продакшн сервере константа prod

3. Если на локальном тормозит, то тут, возможно. Так как в режиме разработки много чего работает ресурсоемкого типа дебаг.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
solotony
@solotony
покоряю пик Балмера
фреймворки на PHP они тормозные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы