@joookleol

Как снизить количество динамических запросов AJAX?

Добрый день. Делаю сайт на PHP, MySQL + AJAX

На данный момент на главной странице выведен график (набор точек {X:Y}), который обновляется каждые 10 секунд с помощью AJAX. AJAX вызывает функцию на PHP, которая ищет в базе данных все значения для текущего графика и возвращает json ответ. По базе идет поиск по колонке ID графика и дате (последние 24 часа). Возвращает массив ID точки и X,Y точки. Каждый раз все точки загружаются полностью, то есть от самой первой до последней в течении текущих суток.

Работаю всего пару дней, посетителей даже нет. Но от одного меня нагрузка уже появилась на хостинг. Подскажите, в каком направлении двигаться, чтобы оптимизировать мои процессы? Если я один пользователь полностью съедаю все вычислительные мощности моего хостинг пакета за 200р, то страшно представить, что будет после запуска контекстной рекламы.

Использую хостинг на котором есть статистика нагрузки:
Зеленая область — запросы к статическим файлам, на обслуживание которых ресурсов практически не требуется.
Желтая область — запросы к скриптам вашего сайта, для выполнения которых выделяются ресурсы сервера.

У меня практически все запросы к сайту - желтые. Из тысячи запросов только 50 статические. При этом сайтом пока пользуюсь я сам.
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега Веб-разработка
{PHP, MySql, HTML, JS, CSS} developer
1) таскать всю базу каждые 10 секунд - бред. По получению данных запомните время (а лучше передавайте его с сервера как отдельное поле) и в следующий раз передавайте ее на сервер в аякс запросе, исходя из нее уже вытаскивайте новые записи из бд, присоединяя их на клиенте к уже полученному ранее массиву данных.
2) Индексы на таблицы - посмотрите сколько отрабатывает типичный запрос, курите explain если медленно отрабатывает, добавляйте индексы на группы запрашиваемых полей.
3) кэширование с 10 секундным временем жизни самое то, если запрашиваете раз в 10 секунд, теоретически это снимет нагрузку на бд до уровня "как 1 пользователь" (при условии что данные не персонализированы, а общие для всех).
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
Stalker_RED
@Stalker_RED
Анекдот:
— Доктор, когда я делаю вот так у меня болит.
— А вы так не делайте.


Для ответа по существу надо смотреть подробно что именно вы там наворотили, выяснить зачем вы обновляете этот график, почему целиком, и вообще в нем ли проблема, или в чем-то другом.
Ответ написан
@LemonFox
stateless mind
Вы можете:
1) В запросе/ответе отправлять дату последнего обновления данных.
2) Кэшировать запросы
3) Оптимизировать запросы к БД
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Сразу после загрузки страницы получать весь массив точек, затем подключаться через вебсокет и получать новые значения сразу, как только они появляются.
Ответ написан
danial72
@danial72
flutter dart.
Запрашивайте не всю базу, а ту часть которой нет.
При первом запросе загружайте все, кешируйте. При подгрузке, загружайте данные, которые младше данных, имеющихся в браузере на данный момент.
Ответ написан
Комментировать
Перейти на GraphQL
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы