Поток данных в Интернете - PullRequest
0 голосов
/ 30 апреля 2011

Фон

Итак, если вы перейдете на https://foursquare.com/, и загляните под заголовок «Недавние действия», вы увидите постоянно обновляемый список обновлений от различных членов Foursquare по всему миру.

Новые обновления соскальзывают на вершину стека, а самое старое соскальзывает (вероятно, с использованием JQuery или чего-то еще, но это не мой вопрос).

Другой участник Stack Overflow сообщил мне, что на самом деле это более или менее псевдо-новостная лента. Когда вы загружаете страницу, она выполняет вызов в базу данных и захватывает 30 самых новых записей, а затем сначала отображает 11 самых старых из этих 30 на странице, а затем устанавливает тайм-аут для соскальзывания с самого старого / слайд с самым новым , Тем не менее, он только последовательно просматривает эти же 30 записей (вы заметите это, если оставите себя на странице без обновления или чего-либо еще). Он не будет делать никаких других вызовов AJAX для получения новых сообщений от сервера. Это происходит только при загрузке страницы.

Вопрос (ы)

  1. Есть ли причина, по которой они это делают?
  2. Я хочу, чтобы моя была настроена, чтобы я мог получить набор записей при загрузке страницы и отобразить их (аналогично Foursquare), однако , я бы хотел (после того, как я переберу те Я привел в DOM), чтобы затем сделать еще один вызов AJAX, чтобы увидеть, есть ли какие-либо более новые, и беспрепятственно интегрировать эти новые в тот же поток. По сути, думайте об этом как о смешении между Twitter и Foursquare. Твиттер сообщает вам, когда появляются новые сообщения, и дает возможность разместить их в верхней части своего канала, а Foursquare просто добавляет новые в обновление страницы, и все. Как можно начать думать об этом (с точки зрения эффективности, архитектуры и т. Д.)?

Я также собираюсь услышать, есть ли причины, по которым я не должен делать это.

Завершено

Пока у меня есть хранимые процедуры SQL Server, которые позволяют мне получать набор записей (из заданного набора обстоятельств на сайте - не по теме). Я могу назвать их всякий раз (очевидно). В качестве части этих записей, возвращающихся из базы данных, приводится их уникальный идентификатор. Когда я отображаю их в DOM, я использую тег <span> для хранения идентификатора каждого сообщения, поэтому у меня есть возможность сделать AJAX-вызов обратно на сервер, а также передать последний идентификатор, который был показан пользователь, а затем у меня также есть процесс, который будет возвращать только те с большим ID (введен позже).

Итак, как вы видите, насколько это технически возможно, я знаю, что это так. Я могу отобразить целую кучу сообщений при загрузке страницы в DOM, а затем, как только она перейдет к последнему, сделать еще один AJAX-вызов на сервер, чтобы получить больше информации и продолжить их обновление. Я в основном задаю два вопроса выше, это хорошая идея (иметь столько сообщений одновременно в DOM)? И если есть лучше и более эффективные способы, я могу это сделать.

Спасибо, ребята.

1 Ответ

2 голосов
/ 30 апреля 2011

На данный момент AJAX-вызовы, вероятно, наиболее эффективны.Как только Web Sockets окончательно прекратит морфинг и шфит версии, это будет путь.Проверьте мой вопрос на этот вопрос и отличный ответ (обязательно прочитайте комментарии): Какой лучший способ открыть поток TCP на сервер?

Что касается ваших основных вопросов, Это хорошая идея?конечно.Теперь предоставленные гигантские корпорации, которые делают миллионы вызовов AJAX, имеют большие серверные комнаты, полные серверов, выполняющих грязную работу.Если у вас нет такого типа мощности сервера, вы можете рассмотреть возможность выполнения вызовов AJAX по таймеру, скажем, каждую минуту или около того, чтобы уменьшить нагрузку на сервер.
Есть ли лучший способ?Не совсем, пока Web Sockets (см. Выше) полностью не развивается.AJAX-вызовы кажутся мне лучшим выбором (создание AJAX-запроса с помощью очень простого метода jQuery.ajax, возврат через сервер в JSON, анализ с помощью jQuery и заполнение DOM. Очень мило, правда.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...