Как выводить записи из таблицы БД MySQL без перезагрузки страницы?

Старый вопрос по ссылке: toster.ru/q/158787 (подходящая реализация не найдена)

Новый вопрос постараюсь сформулировать точнее.
Добрый день. Существует таблица articles (id, field_a, field_b), на данный момент, используя PHP+MySQL+AJAX из нее выводятся новые строки.

На данный момент алгоритм такой:

  • Обработчик x.php выводит все записи из таблицы articles (SORT DESC)
  • В index.php каждые 5 секунд совершается AJAX запрос к файлу x.php и выводится его содержимое


Как изменить алгоритм, чтобы новая запись в таблице автоматически отображалась на странице, без ее перезагрузки? Делать запрос каждую секунду через AJAX неправильно с моей точки зрения. Соответственно может есть подходящие реализации на XMLHTTPREQUEST для изучения? Кто может подсказать, что использовать, если проект на MySQL, PHP, JS (AJAX)?

UPD: Алгоритм не должен загружать браузер. И хочется, чтобы он был простым в плане интеграции, т.к. я в этом вопросе начинающий.

Похожий вопрос по ссылке: toster.ru/q/111157
  • Вопрос задан
  • 5203 просмотра
Пригласить эксперта
Ответы на вопрос 4
viktorvsk
@viktorvsk
Реализация на XMLHTTPREQUEST это и есть постоянный ajax запросы
Есть еще техники типа polling, long-polling, бесконечный iframe, флеш соединение и вебсокеты.
Гуглится легко. Готового решения под вашу таблицу articles и файл x.php - не будет.

В принципе, статьи - это не чат. Не будет ничего страшного, если запаздает на 1-2 секунды. А это уже часто такое время, которое не так уж существенно по нагрузке.

А если людей будет аж вообще очень много, то просто правильно настраиваете работу E-tag и на вас будет работать только nginx. Что вообще очень хорошо для нагрузки.

Но вообще выглядит как преждевременная оптимизация.
Ответ написан
AMar4enko
@AMar4enko
Если принять за "PHP" его классическое использование в стеке веб-сервера, то "правильно" - никак.
Правильная реализация - вебсокеты или server-sent events. Все остальное это полный ахтунг по одной простой причине - при более-менее реальных нагрузках нужно минимизировать затраты (CPU и память) на осблуживание одного соединения. В случае PHP это невозможно.
Обычно такие вещи реализуются на асинхронных фреймворках. Именно поэтому сейчас realtime-web так бурно развивается с приходом node.js.
Можете попробовать на phpDaemon что-нибудь наваять.
Ответ написан
Комментировать
Serhioromano
@Serhioromano
Web Developer
Кто может подсказать, что использовать, если проект на MySQL, PHP, JS (AJAX)?


То что вы хотите называется two-way-bindings. Это когда на странице без перезагрузки появляются данные которые были добавлены в базу.

Считаю что лучшим решением для это - AngularJS но и если вам понравится то ReactJS. Все будер работать из коробки.
Ответ написан
Комментировать
@Levhav
Возьмусь за разработку проектов любой сложности.
Я вам уже отвечал в прошлом вопросе ( PHP+MySQL+Javascript, как вывести новые записи из таблицы? ), сейчас распишу подробнее.

Все ваши страницы по js api подключаются к комет серверу.
В тот код который добавляет новую строку в вашу таблицу добавляете вызов через php api к comet серверу который отправляет событие в канал с информацией о добавленных записях.
Ваши страницы получают уведомление от комет сервера и всё.

Работы минут на 20 максимум.
Вот online demo с примером

В вашем случаи нет необходимости думать о mysql, строки туда добавляет php скрипт, вот его и надо модифицировать так чтобы он ещё и отправлял уведомление через комет сервер на те страницы которые заинтересованы в получении этой информации.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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