将更改推送到网页而不刷新

时间:2012-12-27 08:45:34

标签: javascript jquery ajax webpage

我知道我们可以通过轮询定期更改来实现此目的。这可以通过AJAX实现(例如使用jQuery.load()setInterval())。

但我想知道还有其他方法吗?其他成本较低的方法或更有效的方法?一个很棒的聊天客户端遵循什么逻辑?一旦你开始打字,另一端就会知道你正在打字。

我们在stackoverflow上遵循什么机制来更新upvote计数或显示编辑等等而不刷新页面?

1 个答案:

答案 0 :(得分:20)

在保持客户端和服务器同步(接近)实时时,有三件事情会立即浮现在脑海中:

  • 长轮询:您已经提到了这一点,您在客户端上设置了一个定时器,每10秒左右触发一次新的AJAX请求。这可能是3中最“低技术”的,也是效率最低的;但它也是最兼容的(意味着它适用于所有浏览器,甚至像IE6 / 7这样的东西)

  • WebSockets :sdespont在评论中已经提到过这个。虽然WebSockets比长轮询更有效(因为它只是让双向客户端 - 服务器通信无限期地打开),但如果你所要做的就是从服务器获得定期更新,那么它可能是一个非常严厉的解决方案。 Firefox和Chrome的所有版本都支持and IE added support in IE10

  • 服务器发送的事件:这个似乎不太受欢迎(或者只是不太知名)。它允许服务器向客户端发送更改(与客户端请求来自服务器的更改相反,如长轮询的情况)。这也只是一种单向通信(服务器 - >客户端),并且在请求完成后连接被关闭(与双向通信保持打开的WebSockets相反)。再一次,并非所有浏览器都支持它,and there is no IE support at all

This也是一篇很好的文章,它解释了更现代的客户端 - 服务器通信方式之间的区别。 如果您想了解有关服务器发送事件的更多信息,请this is a good write up

相关问题