powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Yii2, метод save модели отрабатывает очень долго
4 сообщений из 4, страница 1 из 1
Yii2, метод save модели отрабатывает очень долго
    #39497804
Eklm89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется такой код, который просто устанавливает значение поля 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
Yii2, метод save модели отрабатывает очень долго
    #39497851
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Профайл посмотреть?
...
Рейтинг: 0 / 0
Yii2, метод save модели отрабатывает очень долго
    #39498380
Eklm89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выяснилось следующее. Медленно отрабатывает вызов 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
Yii2, метод save модели отрабатывает очень долго
    #39498599
Eklm89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В модели в переопределённом методе afterSave была проблема. А afterSave родителя вызывался в его конце.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Yii2, метод save модели отрабатывает очень долго
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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