Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Yii2, метод save модели отрабатывает очень долго / 4 сообщений из 4, страница 1 из 1
31.07.2017, 14:50
    #39497804
Eklm89
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yii2, метод save модели отрабатывает очень долго
Имеется такой код, который просто устанавливает значение поля status в 0 или 1.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public function actionNews_status($id,$status){
    $status = ($status==1)?1:0;
    $number = false;
    $news = News::findOne($id);
    if(!is_null($news)){
        $news->status = $status;
        $number = $news->save();
        Redis::rset($CACHE_mat, null);
    }
    return json_encode(['status'=>$number]);
}



И он работает где-то около 20 секунд.
Как выяснилось, долго работает строка $number = $news->save();
Я определил это с помощью exit-ов до и после строки.
Также выяснилось, что значение поля status в действительности меняется мгновенно, так как запрос к таблице сразу же показывает изменения. Но метод save после этого продолжает работать ещё долго.

Поле status определено как TINYINT(1) NULL DEFAULT 0 без всяких индексов.
База MySQL, InnoDB, в таблице 78701 записей.
...
Рейтинг: 0 / 0
31.07.2017, 15:57
    #39497851
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yii2, метод save модели отрабатывает очень долго
Профайл посмотреть?
...
Рейтинг: 0 / 0
01.08.2017, 13:52
    #39498380
Eklm89
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yii2, метод save модели отрабатывает очень долго
Выяснилось следующее. Медленно отрабатывает вызов afterSave в конце метода updateInternal(перед return).
Причём, весь код до этого вызова отрабатывает быстро. Тормозит сам вызов afterSave.
То есть, cтавлю exit перед $this->afterSave(false, $changedAttributes) - попадаю туда мгновенно, ставлю exit первой строкой внутри метода afterSave - жду порядка 17 секунд.
Трудно сказать, что может задержать сам по себе вызов функции. Может интерпретатор php работает не строго последовательно, а
асинхронно что-ли, и код внутри метода может повлиять на быстроту вызова самого метода?

Код afterSave выглядит вот так
Код: php
1.
2.
3.
4.
5.
6.
    public function afterSave($insert, $changedAttributes)
    {
        $this->trigger($insert ? self::EVENT_AFTER_INSERT : self::EVENT_AFTER_UPDATE, new AfterSaveEvent([
            'changedAttributes' => $changedAttributes,
        ]));
    }



В функции trigger тормозов не заметил, может медленно создается объект AfterSaveEvent?
...
Рейтинг: 0 / 0
01.08.2017, 19:18
    #39498599
Eklm89
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yii2, метод save модели отрабатывает очень долго
В модели в переопределённом методе afterSave была проблема. А afterSave родителя вызывался в его конце.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Yii2, метод save модели отрабатывает очень долго / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]