За последние 24 часа нас посетили 87932 программиста и 5588 роботов. Сейчас ищут 2080 программистов ...

PHP оптимизация

Тема в разделе "PHP для новичков", создана пользователем Kaizoku04, 6 янв 2017.

  1. Kaizoku04

    Kaizoku04 Новичок

    С нами с:
    6 янв 2017
    Сообщения:
    3
    Симпатии:
    0
    Есть сайт

    http://clip2net.com/s/3G9Jdd4

    php+js+mysql

    и есть определенная проблема с нагрузкой на базу mysql и быстродействию запросов

    В данный момент js отправляет ajax запрос на пхп,
    пхп проверяет все позиции на кол.занятых.слотов
    и отправляет ответ с данными и в результате чего js меняет местами лоты
    и запрос посылается каждую секунду т.е 60зпросов за минуту и умножаем на условные 100 онлайна получаем 6000 запросов в бд за минуту

    и возникла такая идея что если запускать через крон пхп файл 1раз в секунду и который будет например создавать/редактировать json файл в котором будут записываться все данные лотов и так получится только 60 запросов за минуту, а у юзеров уже через js ajax идет загрузка этого json файла с данными и менять позиции и занятые слота лотов

    что думаете? поможет ли?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    Поможет. Кэширование всегда помогает. Но вы слишком усложнили. Крон не нужен, все проще.
    При запросе пользователя, любого, проверяете, есть ли кэш. Если нет - генерируете. Если есть - проверяете, сколько ему времени. Если устарел, генерируете новый. Если не устарел - отдаете пользователю то, что есть. Таким образом, при стабильной посещаемости пользователи сами будут постоянно обновлять кэш. При понижении посещаемости, например, ночью, сервера не будут "молотить в холостую". Раз в секунду - это слишком часто, как по мне. В зависимости от качества сети, это может быть меньше, чем у пользователя до вас и обратно запросы пройдут, серьезно. Поставьте раз в 5-10 секунд, ничего страшного. Пользователь разницы не заметит, а серверу будет легче жить.

    Главное - уделите достаточно внимания блокировкам, чтобы не было проблем, когда, например, 100 человек разом навалятся на протухший кэш и начнут его обновлять. Но это все разруливается очень легко через родные пхпшные механизмы.

    Кроме того, проиндексируйте вашу БД, это может помочь.
    Если у вас структура БД с лотами совсем простая, то, вероятно, можно уйти в noSQL - решения. Они гораздо быстрее работают.
     
    artoodetoo нравится это.
  3. Kaizoku04

    Kaizoku04 Новичок

    С нами с:
    6 янв 2017
    Сообщения:
    3
    Симпатии:
    0
    ну это так я просто в пример раз в секунду

    по nosql можете что нибудь посоветовать?

    а еще вопрос есть кнопка занять слот он занимает 200-400мс js+php+mysql, можно ли как то его убыстрить например до 50мс? при нажатии 2запроса в бд -> проверка -> запись в базу занятие слота, апдейт лота, апдейт юзера -> ответ
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    Редис-шмедис и иже с ними. Они в плане использования все похожие. Почитайте, подберите, что вам больше нравится.

    Кто ж его знает, что у вас там под капотом происходит на самом деле, какие запросы, какие проверки и тд. Это ж надо детально изучать, чтобы точно сказать. Если у вас все упирается в неоптимальные запросы, оптимизируйте запросы, если в неоптимальные алгоритмы - оптимизируйте алгоритмы. Если в скорость работы самой БД...вы уперлись в стену, масштабируйте сервер. Скачок от 400мс до 50мс - это, в общем-то, скачок в 8 раз. Это серьезные хотелки, и не факт, что выполнимые.

    В общем, профилирование покажет.

    Но можно зайти с другой стороны - насколько часто у вас происходят такие тяжелые операции? И нужно ли оно вообще, оптимизировать это место? Если у вас один такой запрос приходится на тысячу легких запросов, то овчинка может выделки не стоить.
     
  5. Kaizoku04

    Kaizoku04 Новичок

    С нами с:
    6 янв 2017
    Сообщения:
    3
    Симпатии:
    0
    Дело в том что я создал пустой пхп файл который просто
    Код (Text):
    1. <?php
    2.     echo json_encode(array('message' => 'error test', 'error' => true));
    3. ?>
    и отправил тот же запрос через ajax и ответ так же занял 200мс и вот думаю стоит ли тратить время на оптимизацию кода или думать в каком то другом направлении
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    200мс - это у вас время, за которое сервер отработал, или время, за которое ответ пришел? Это не одно и то же. Если второе, то тут решают нагруженность канала, расстояние до сервера и тд. Это может быть крайне индивидуальная фигня. Если первое, то, быть может, вам надо мощностей подкинуть.
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    от этого надо отказаться просто и перейти на постоянное подключение к серверу через вебсокеты или логпулинг