Я делаю сайт, который позволяет пользователям размещать посты прямо с первой страницы. Также на первой странице у меня есть живое обновление опубликованных вопросов. Каждый вопрос в этом прямом эфире имеет свой собственный маленький контейнер, который содержит заголовок сообщения и некоторые другие детали. Когда пользователь нажимает на сообщение, открывается мод (Bootstrap). Там вы можете увидеть заголовок поста, подробности поста и ленту комментариев. И фид постов на первой странице, и фид комментариев каждого поста обновляются каждые 15 секунд (фид комментариев начинает обновляться, когда модальный режим открыт и когда любой модальный канал открыт, фид постов на лицевой странице перестает обновляться). Все «живые» функции работают через jQuery / Ajax. Что я заметил, так это то, что даже на моем локальном сервере это занимает некоторое заметное время для загрузки. Моя база данных находится в MySQL, и я сделал несколько (около 15) тестовых постов и добавил комментарии к некоторым.
Код для поста в основном:
function updatePosts({
$("#postContainer").load('post_pull.php');
}
setInterval('updatePosts()', 15000);
А php-файл просто возвращает все посты внутри div, с подробностями постов с модальным и некоторыми скриптами.
Фид комментариев каждого поста очень похож, за исключением того, что он тянет комментарии, которые имеют «родительский идентификатор» открытого модального окна.
Поэтому мой вопрос: каков наиболее эффективный способ делать живые обновления, потому что, если время загрузки заметно сейчас, на локальном сервере и с кучей сообщений, оно не будет использоваться на реальном сервере, где постоянно публикуются люди.
Когда вам требуется updatePosts (), сообщите серверу последний идентификатор ваших сообщений, отображаемых в данный момент, чтобы сервер мог отправлять только сообщения, которых нет на вашей странице.
updatePosts(lastID);
function updatePosts(lastid) {
$.get( "post_pull.php?lastid=" + lastid, function() {
$("#postContainer").prepend(data); // or append
});
}
поэтому сервер вернет только новые сообщения, и вы добавите их в начало списка.
Других решений пока нет …