有没有更好的方法来创建异步更新而不使用setInterval?

时间:2012-03-13 02:50:26

标签: javascript jquery ajax asynchronous

我的网站有多个部分每半秒检查一次更新,因此它可以提醒您消息等。但是我觉得使用带有setInterval的$ .post可能会在网站上有点沉重。是否有更好的建议用于这些任务的替代方法?

1 个答案:

答案 0 :(得分:4)

是的,虽然这不是微不足道的。

更好的方法

您可以使用长轮询(或“彗星”),它会打开一个连接,让它保持打开20秒左右,然后立即重新打开它。服务器可以随时发送内容。

较新的浏览器提供websockets,提供持久连接。

两者的代码都相对复杂,因此您需要some kind of framework来处理事情。此外,需要为每个用户保持一个连接,因此它只适用于像NodeJS这样轻量级的东西。

更简单的方法

如果您希望更容易实现某些内容,我建议您按照建议检查更新(它称为短轮询以与长轮询/ websockets进行对比)。你可以这样做一个简单的轮询解决方案:

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

3秒间隔have been used in used before by high profile people

如果事情变慢,请尝试在/ datasource

中分析数据库查询