Обновление данных Ajax. Extjs - PullRequest
3 голосов
/ 16 ноября 2009

Мне нужно обновлять определенные данные (в сетке) и собирался делать опрос к серверу каждые 15 секунд или около того, чтобы получить данные и обновить сетку, однако он выглядит немного грязным (сетка будет иметь значок загрузки каждые 15 секунд ..) не выглядит великолепно ... < br /> Другой вариант - проверить, есть ли новые данные, сравнить новые данные с текущими данными и только обновить сетку , если есть какие-либо изменения (я должен был бы сделать это на стороне клиента, потому что поддержание текущего состояния каждый вошедший в систему пользователь также выглядит излишним)
Я уверен, что есть лучшие решения, и хотел бы услышать о них

Я слышал о COMET, но синица кажется излишним.
Кстати, я использую asp.net MVC на стороне сервера

Мне бы хотелось услышать, что люди говорят за или против непрерывного опроса js Приветствия

Ответы [ 5 ]

2 голосов
/ 23 ноября 2009

Похоже, COMET - действительно то решение, которое вы ищете. В этом сценарии вам не нужно ни опрашивать, ни сравнивать, так как вы можете вытолкнуть в сетку только «соответствующие» измененные данные.

Проверьте WebSync , это хороший комет-сервер для .NET, который позволит вам делать именно то, что вы описали.

Вот демоверсия с использованием ExtJS и ASP.NET , которая запускает непрерывный поток обновлений биржевых макетов. Демо-версия немного больше, чем нужно, но принцип идентичен.

1 голос
/ 24 ноября 2009

Я не знаю, как выглядит ваш источник данных на стороне сервера, или какой тип данных вы обслуживаете, но одно из решений состоит в том, чтобы сервировать ваши данные с отметкой времени и отправлять отметку времени последнего опроса с каждым последующий запрос

  1. Опросить сервер, отправив отметку времени последнего опроса службы (например, lastPollTime).
  2. Сервер использует временную метку, чтобы определить, какие данные являются новыми / обновленными, и возвращает только эти данные ( дельта ), уменьшая объем передаваемых данных и упрощая ваш код на стороне клиента.
  3. Может быть пустым, это может быть несколько ячеек, это может быть вся сетка, но клиент всегда обновляет данные, которые ему возвращаются, потому что они уже известны как новые.

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

Кроме того, это позволяет вам поддерживать состояние на стороне сервера, поскольку вам не нужно сохранять состояние для каждого отдельного пользователя. У вас есть только одно состояние, состояние текущих данных, которое дифференцируется по времени доступа.

1 голос
/ 17 ноября 2009

Я полагаю, что комета не является избыточным, если «обновления должны быть постоянными». 15 секунд очень часто ; Вас посещают многие? Ваш сервер может быть использован для обслуживания этих запросов, в то время как другие не работают.

1 голос
/ 16 ноября 2009

Каждый раз, когда вы получаете ответ от сервера, проверяйте, изменилось ли что-либо.

Сделай запрос. Дайте пользователю знать, что вы работаете с каким-то счетчиком, не скрывайте его. Запланируйте следующий запрос через 15 секунд. Следующий запрос выполняется; если ничего не изменилось, запланируйте следующий через 15 + 5 секунд. Следующий запрос выполняется; если ничего не изменилось, запланируйте следующее через 15 +5 +5 секунд. И так далее. Следующий запрос выполняется; если что-то действительно изменилось, установите интервал в 15 секунд.

Prototype может делать это полуавтоматически с Ajax.PeriodicalUpdater, но вам, вероятно, понадобится материал, более приспособленный к вашим потребностям.

В любом случае, просто идея.


Что касается непрерывного опроса в целом; Это плохо, только если вы заходите на другой сайт (используя «мост» PHP или что-то в этом роде). Если вы используете свои собственные ресурсы, вы просто должны убедиться, что вы не истощаете их. Установите приличные интервалы с затуханием.

0 голосов
/ 16 ноября 2009

Я думаю, что проверка наличия новых данных - хороший вариант.

Я бы посчитал количество строк в базе данных и сравнил бы это с количеством строк в вашей (HTML) таблице. Если они не совпадают, получите разницу в строках.

Скажем, у вас есть 12 строк таблицы и 14 строк базы данных при проверке: Получить последние (14 - 12) = 2 строки.

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