2012-03-13 49 views
3

我的网站有多个部分每隔半秒钟检查一次更新,以便它可以提醒您有关邮件等。但是我觉得在站点上使用$ .post和setInterval可能会有点沉重。是否有更好的建议用于这些任务的替代方法?有没有更好的方式来创建异步更新而不使用setInterval?

+1

setInterval绝对是设置异步定时事件的最佳方式。你说你有多个部分,每个部分都有自己的POST吗?这似乎是它的重要部分。最好有一个请求获取所有数据。 – loganfsmyth 2012-03-13 02:52:37

+0

你应该真的放慢这些请求。每半秒发送一次HTTP请求就太多了。 20-30秒更理智一点。使用Web套接字是理想的。 – josh3736 2012-03-13 02:57:05

+0

您可以增加间隔时间,这样不会占用太多的处理时间。这里是术语Comet下的方法http://en.wikipedia.org/wiki/Comet_(programming) – Joseph 2012-03-13 02:58:10

回答

1

socket.io剖析数据库查询是,如果你使用nodeJS的路要走。否则,结帐this jQuery plugin,它具有优雅的降级实现,即使不如socket.io全面。

+0

不错的插件!你不需要一些轻量级的Web服务器吗?一个庞大的Apache/PHP进程每个用户都会迅速地抨击服务器... – cmc 2012-03-13 09:36:12

+0

取决于该项目,大多数早期的网站在任何时候都可能只有20-50个用户。这并不意味着你不能缩放PHP,看看wordpress.com或Facebook。 – soemarko 2012-03-13 14:12:58

+0

当然你可以扩展PHP ......我只是怀疑websockets和PHP/Apache混合比长时间轮询和PHP/Apache更好。短轮询,当然没问题。 – cmc 2012-03-13 15:15:11

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

如果事情变得缓慢,尝试在/数据源

+3

+1 - 长轮询/网络套接字确实是这样做的正确方法。另外,[所有的辛苦工作已经完成。](http://socket.io/) – josh3736 2012-03-13 02:57:35

+0

感谢您的链接乔希!确认这是一个很好的框架,我的一个非常能干的人物正在成功地使用它来处理一些严重的实时问题。 – cmc 2012-03-13 03:09:38

相关问题