Прожорливые функции

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Putin
Сообщения: 14
Зарегистрирован: 2016.04.05, 21:32

Прожорливые функции

Сообщение Putin »

Если я использую

Код: Выделить всё

Yii::$app->user->isGuest
или

Код: Выделить всё

\Yii::$app->user->identity->login; 
то у нас они съедают от 20 до 35% скорости отображении страницы, при условии что пользователь залогинен.
Вопрос, из-за чего это происходит и как можно это пофиксить - так как это не нормально.

ПРЕДЛОЖЕНИЕ! Предлагаю пофиксить данное безобразие.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Прожорливые функции

Сообщение samdark »

25—30%? Это не нормально. Чем профайлите?
Putin
Сообщения: 14
Зарегистрирован: 2016.04.05, 21:32

Re: Прожорливые функции

Сообщение Putin »

Sam Dark писал(а):25—30%? Это не нормально. Чем профайлите?
Стандартными средствами нескольких браузеров (GoogleChrome, IE, FF, Opera). Такое поведение наблюдается в любом приложении, даже в стандартной демке.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Прожорливые функции

Сообщение samdark »

1. Локально наблюдается или только на конкретном сервере?
2. В дебаг тулбаре трейсы сравнить можно?
3. Будет круто, если поставите что-то типа https://blackfire.io/ и сравните профили вызова.

У меня разницы особо не видно. Отличия в один быстрый запрос к базе при доступе к ->login и это явно не 30%.
Putin
Сообщения: 14
Зарегистрирован: 2016.04.05, 21:32

Re: Прожорливые функции

Сообщение Putin »

Sam Dark писал(а):1. Локально наблюдается или только на конкретном сервере?
2. В дебаг тулбаре трейсы сравнить можно?
3. Будет круто, если поставите что-то типа https://blackfire.io/ и сравните профили вызова.

У меня разницы особо не видно. Отличия в один быстрый запрос к базе при доступе к ->login и это явно не 30%.

* Локально наблюдается или только на конкретном сервере? -- и там и там

* В дебаг тулбаре трейсы сравнить можно? --- идет три запроса
.

Код: Выделить всё

5.1 ms    SHOW    SHOW FULL COLUMNS FROM `account`
0.5 ms    SELECT    SELECT * FROM `account` WHERE (`user_id`='50') AND (`ban`='0') AND (`user_active`='1')
0.4 ms    SHOW    SHOW CREATE TABLE `account`

трейсы:
они отличаются только этим, тут они есть а там их нету:

Код: Выделить всё

______________________________________________________________________________________
12    17:42:00.018    info    yii\web\Session::open    Session started
______________________________________________________________________________________
13    17:42:00.037    info    yii\db\Connection::open    Opening DB connection: mysql:host=localhost;dbname=bdyii2
______________________________________________________________________________________
14    17:42:00.039    info    yii\db\Command::query    SELECT * FROM `account` WHERE (`user_id`='50') AND (`ban`='0') AND (`user_active`='1')
______________________________________________________________________________________
15    17:42:00.041    info    yii\db\Command::query    SHOW FULL COLUMNS FROM `account`
______________________________________________________________________________________
16    17:42:00.048    info    yii\db\Command::query    SHOW CREATE TABLE `account`
______________________________________________________________________________________





* Будет круто, если поставите что-то типа https://blackfire.io/ и сравните профили вызова. --- пкоа не могу зарегистрироватся, в связи с тем, что у них каие-то с этим проблеы.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Прожорливые функции

Сообщение zelenin »

вы в коде попрофилируйте банальным microtime(). Не пойму, как вы можете по файрбагу определить тормозящую в коде функцию.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Прожорливые функции

Сообщение samdark »

1. SHOW CREATE TABLE `account` и SHOW SHOW FULL COLUMNS FROM `account` — см. включение кеширования схемы.
2. От SELECT запроса и старта сессии не избавиться, они нужны.

Всё указанное выше кушает не более 10 ms. У вас страница всего грузится за 30ms?
Putin
Сообщения: 14
Зарегистрирован: 2016.04.05, 21:32

Re: Прожорливые функции

Сообщение Putin »

Sam Dark писал(а):1. SHOW CREATE TABLE `account` и SHOW SHOW FULL COLUMNS FROM `account` — см. включение кеширования схемы.
2. От SELECT запроса и старта сессии не избавиться, они нужны.

Всё указанное выше кушает не более 10 ms. У вас страница всего грузится за 30ms?


Загрузка страниц равна 56 миллесекундам. Но если используем вышеописанные два метода, то скорость становится равна 78-95 миллесекундам. Дополнительно сжирает от 40%.

Позже, выложу результат нашего ислледования. Если есть что добавить, напишите.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Прожорливые функции

Сообщение zelenin »

Putin писал(а):Загрузка страниц равна 56 миллесекундам. Но если используем вышеописанные два метода, то скорость становится равна 78-95 миллесекундам. Дополнительно сжирает от 40%.
я реально сразу об этом подумал) что сравнивается пустое ведро с ведром, залитым самой простой водой, которая почему-то добавляет к массе 95%.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Прожорливые функции

Сообщение samdark »

pomidorr
Сообщения: 1
Зарегистрирован: 2016.11.16, 10:18

Re: Прожорливые функции

Сообщение pomidorr »

Вот такой код вешает сайт, пока не закончится цикл, т.е. даже из других вкладок или браузеров сайт не грузится.
for($i=1;$i<=10000000;$i++){
$id = Yii::$app->user->id;
}
Причем другие запросы к таблицам в базе тормозят сайт, но не вешают его.
Аватара пользователя
mitaichik
Сообщения: 512
Зарегистрирован: 2010.09.24, 21:18
Откуда: Россия, Санкт-Петербург

Re: Прожорливые функции

Сообщение mitaichik »

Putin писал(а):
Sam Dark писал(а):1. SHOW CREATE TABLE `account` и SHOW SHOW FULL COLUMNS FROM `account` — см. включение кеширования схемы.
2. От SELECT запроса и старта сессии не избавиться, они нужны.

Всё указанное выше кушает не более 10 ms. У вас страница всего грузится за 30ms?


Загрузка страниц равна 56 миллесекундам. Но если используем вышеописанные два метода, то скорость становится равна 78-95 миллесекундам. Дополнительно сжирает от 40%.

Позже, выложу результат нашего ислледования. Если есть что добавить, напишите.
Вообще беспредел! Такая же фигня - статичные страниц, без запросов даже, загружаются за 39ms!!! 6ой год не могут пофиксить!!! А после переноса на Azure стало вообще дико тормозить: по 80-90ms. А говорили в европах хостинги быстрее! Пользователи жалуются, деньги теряются, вообще не знаю что делать! После такой подставы вообще программрованием заниматься не охото - в сантехники решил уйти!
Ответить