Для опытных прогеров. Помогите определить, где именно криво написан код

12
Zdorova
На сайте с 09.01.2010
Offline
133
1004

А вдруг случится чудо и кто-то сможет определить проблему…

Только для очень прошаренных спецов :)

Есть сайт, работает шустро. Но как только активируем функцию Livescore (каждые 20 сек у юзера обновляются результаты спортивных матчей), то сильно возрастает нагрузка на сайт. И когда больше 100 юзеров онлайн, то совсем тяжело сайт работает. Как только отключаем – сразу все приходит в норму, сайт летает и на 200-300 юзерах онлайн.

Суть такая. В матче забит гол – админ в админке у соответствующего матча изменил счет и воспроизвел звук гола. Автоматически у юзера на сайте изменяется счет, мигает строка с этим матчем, проигрывается звук гола. Запрос на то, есть ли изменения, отправляется каждые 20 секунд. Если есть изменения – берем из файла новый счет, проигрываем звук, мигает строчка.

(Так задумано по крайней мере, а что там разработчик написал, я не понимаю :)

Подгружаем данные из html файла (blades.php) – все равно большая нагрузка.

Вот код:

$page = '';
$livescore_update = 0;
if(File::exists(env('DOC_ROOT')."/resources/views/pages/livescore_live_".$this->lang.".blades.php")){
$livescore_update = 1;
$page = view('pages.livescore_live_'.$this->lang)->render();
if((mb_stripos($page, 'audio') !== false || mb_stripos($page, 'row animation') !== false) && filemtime(env('DOC_ROOT').'/resources/views/pages/livescore_live_'.$this->lang.'.blades.php') < strtotime(Carbon::now()->subSeconds(env('LIVESCORE_TIME')))){
render_pages('livescore_live');
$page = view('pages.livescore_live_'.$this->lang)->render();
}
}
else
if(File::exists(env('DOC_ROOT')."/resources/views/pages/livescore_anounce_".$this->lang.".blades.php"))
$page = view('pages.livescore_anounce_'.$this->lang)->render();
return response()->json([ 'status' => true,
'livescore' => $livescore_update,
'page' => $page
]);

Кто-то может понять, в чем косяк? Готов отблагодарить финансово, если кто-то найдет проблему.

S
На сайте с 30.09.2016
Offline
469
#1
Zdorova:
Кто-то может понять, в чем косяк? Готов отблагодарить финансово, если кто-то найдет проблему.

Судя по всему, раз в 20 секунд обновляется страница. По хорошему, если изменений нет, то надо давать отлуп, а не кучу кода.

Можешь не благодарить.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
Aisamiery
На сайте с 12.04.2015
Offline
293
#2

перевести на сокеты? так как polling не самый лучший вариант

в ларавеле кстати есть в коробке broadcasting

И что делает функция render_pages('livescore_live')?

И еще бы содержимое этого blade.php шаблона получить, а точнее двух

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
S
На сайте с 23.05.2004
Offline
316
#3

Раз в 20 секунд обновлять кеш где нибудь в шаред мемори и оттуда простым скриптом в 5 строк брать инфу, а не тянуть фреймворк на каждый чих.

Можно еще данные отдавать через сгенеренный файл, закешировать через nginx на 20 секунд страницу с данными.

Или как выше предложили сокеты.

Это просто подпись.
bruder
На сайте с 03.02.2015
Offline
199
#4
Zdorova:
Подгружаем данные из html файла (blades.php) – все равно большая нагрузка.

Подозрительно динамичное расширение у html файла.

if(File::exists(env('DOC_ROOT')."/resources/views/pages/livescore_live_".$this->lang.".blades.php")){

Мелочь, но излишнее обращение к диску/кэшу.

LEOnidUKG
На сайте с 25.11.2006
Offline
1725
#5

У вас скорее всего нагрузка может идти от:

render_pages('livescore_live');

Что там делается не понятно.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Aisamiery
На сайте с 12.04.2015
Offline
293
#6

А еще ТС, если честно и положа руку на сердце у вас очень стрёмные кодеры на laravel'е. Laravel из коробки дружит с VueJS на котором можно построить офигенный интерфейс, есть сокеты в коробке, а у вас делают какой то говнокод с рендером html в переменную и отправкой его обратно через json, хотя по сути можно отправить просто счет, флаг звука и анимации, а отрендерить на клиенте.

S
На сайте с 23.05.2004
Offline
316
#7

laravel - это php .

vuejs - это js

Вопрос - с фига ли кодер на пхп стремный, если он не знает vuejs ?

Metal Messiah
На сайте с 01.08.2010
Offline
152
#8

Кто тупит? php? apache? nginx? mysql? искать по top в консоли зайдя по ssh, смотреть нагрузку на CPU

anonymous, думай что говоришь и не забывай подписать отзыв :)
Aisamiery
На сайте с 12.04.2015
Offline
293
#9
Stek:
laravel - это php .
vuejs - это js

Вопрос - с фига ли кодер на пхп стремный, если он не знает vuejs ?

Где я такое написал? Дергать вьюху непонятно в каком месте, непонятно каким образом её наполняя это и есть говнокод

Процитирую себя специально для вас чтоб через строку прочитать было невозможно даже при сильном желании

у вас делают какой то говнокод с рендером html в переменную и отправкой его обратно через json

А остальное это указание на то что в коробке уже есть элегантные решение и на laracast'e есть море примеров. Да и уж мне кажется повесить классы при помощи jQuery может любой бэкенд мидл, а джуниору рано в laravel как и в любые другие фреймы, начинать желательно с основ и постепенно, на примере тех же cms

Zdorova
На сайте с 09.01.2010
Offline
133
#10
Metal_Messiah:
Кто тупит? php? apache? nginx? mysql? искать по top в консоли зайдя по ssh, смотреть нагрузку на CPU

Создается много процессов php-fpm: pool, которые жрут по 10-15%.

sql в районе 10%.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий