在定期时间间隔后自动更新页面内容的最佳方法是什么?

时间:2012-01-26 02:33:48

标签: jquery node.js comet

我正在使用Web应用程序,该应用程序有一个DIV,其中显示了来自其他网站的有关某个主题的最新更新。所以我想要的是在后端数据库中真正更新数据后立即更新DIV。

在后端我使用cron来获取&将数据存储在数据库中

执行此操作的一种简单方法是使用setInterval()函数并继续以特定时间间隔获取数据,但我认为这只会导致服务器上出现不必要的负载并浪费CPU周期。

那么实现这个的最佳方法是什么?可以/我应该使用nodeJs吗?

-Thanks

P.S。我只想要像facebook一样用来在页面中间更新它的新闻源。

我还没有使用nodeJs的经验但老实说我甚至不知道nodeJs是否适合这个。

3 个答案:

答案 0 :(得分:2)

如果您要解决的问题是如何在不重复轮询后端服务器的情况下有效更新浏览器显示,那么您可以使用“长轮询”来进行长时间超时的Web服务器请求和请求仅在实际存在一些新数据或最终超时时返回。您可以通过在Google或SO上搜索“javascript long polling”来阅读更多内容。以下是一些参考文献:

How do I implement basic "Long Polling"?

How to implement Server push / long polling / comet using PHP and Javascript

http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

在现代浏览器中,您还可以使用Web套接字,客户端直接向服务器打开套接字,服务器只在有新数据时向您发送新数据。

在任何一种情况下,您都需要一台可以处理大量同时但大多数空闲连接的后端服务器。

答案 1 :(得分:0)

Node对于此肯定是有用的,但是没有必要像jfriend00所说的那样。请查看socket.io,了解从服务器到浏览器的“推送”通知示例。由于您没有任何node.js的经验,因此我们是否会将其推荐为解决方案取决于应用程序。如果这只是一个用于教育目的的爱好项目,我会说继续,修补。如果这是用于生产系统而你还没有以其他身份使用node.js,我说要坚持使用你在问题中提到的setInterval方法之类的简单方法。

答案 2 :(得分:0)

尝试用谷歌搜索socket.io / now.js,它可以通过使用websockets推送到客户端轻松解决您的问题,并优雅地回退到闪存套接字。您不必将所有代码移植到node.js,而是将其与原始代码一起使用。 另请注意,如果间隔最初为5分钟,则最好使用setInterval ajax。 Websockets最适合(近乎)实时通信(在几秒钟内具有小延迟,例如聊天)。