Есть ли лучший способ создавать асинхронные обновления без использования setInterval? - PullRequest
3 голосов
/ 13 марта 2012

У меня есть несколько частей моего сайта, которые проверяют наличие обновлений каждые полсекунды, чтобы он мог предупреждать вас о сообщениях и т. Д. Однако я чувствую, что использование $ .post с setInterval может быть немного тяжелым для сайта.Есть ли альтернативный метод, который лучше рекомендуется для этих задач?

Ответы [ 2 ]

4 голосов
/ 13 марта 2012

Да, хотя это не тривиально.

лучший подход

Вы можете использовать длинный опрос (или «комету»), которая открывает соединение, держит его открытым в течение 20 с или около того, и сразу же открывает его снова. Сервер может отправлять что-либо в любое время.

Более новые браузеры предоставляют веб-сокеты, которые обеспечивают постоянные соединения.

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

Более легкий подход

Если вы хотите что-то более простое в реализации, я бы порекомендовал проверять наличие обновлений, как вы предлагали (это называется короткий опрос, чтобы сравнить его с длинными опросами / веб-сокетами). Вы можете сделать простое решение для опроса, например, так:

window.setInterval(function () {
  // More lightweight than $.post
  $.get('/datasource', function () {
    /* do something */
  }); 
}, 3000);

3-секундные интервалы ранее использовались высокопоставленными людьми .

Если что-то идет медленно, попробуйте профилировать запросы к базе данных в / datasource

1 голос
/ 13 марта 2012

socket.io будет правильным решением, если вы используете nodeJS .В противном случае, извлеките этот плагин jQuery , в нем реализована постепенная деградация, хотя и не такая полная, как socket.io.

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