首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Ajax请求每10秒(除了长轮询)?

如何使Ajax请求每10秒(除了长轮询)?
EN

Stack Overflow用户
提问于 2010-11-06 17:36:38
回答 2查看 6.4K关注 0票数 3

我正尝试每10秒从服务器获取一个json对象请求,使用以下方法:

代码语言:javascript
复制
setInterval(function(){
  $.ajax({
    url: '/',
    success: function(data){
      //do stuff with data
    }
  });
}, 10000);

但这不是很有效率。我知道长时间的投票,但我不认为会有太大的区别。我知道我每10秒就会收到新的数据,所以在效率方面,长时间轮询不是和setInterval完全一样吗?

浏览器端缓存是解决这个问题的好办法吗?

我将得到的JSON对象如下所示:

代码语言:javascript
复制
var data =  {1: {'user': 'John', 'age': '25'}, {2: {'user': 'Doe', 'age': '30'}}

在此之后,我希望显示data.user几秒钟,然后顺利地将其转换为data1.user,使用'fadeOut‘和'fadeIn’等等,直到用户用完为止。我基本上想要创建用户用户名的幻灯片。

缓存是一个好的解决方案,还是应该坚持每10秒调用一次ajax?如果是,我将如何实现这一点,如果不是,我应该使用什么方法?

我不确定我是否解释得够好,所以告诉我是否有什么事情还不清楚。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-06 17:49:55

我肯定会考虑缓存。特别是如果您得到的用户更多,每10秒发出一个AJAX请求很容易使服务器超载。但是,如果您想保持简单,则每隔几分钟请求一次,以进行更新。缓存用户,将它们生成到javascript代码中,例如user1= new (user1,user2,.)。如果页面不是那么重要的话,您就不必一直更新它了,因为大多数用户在一两分钟内就会导航到其他地方。如果您有一个长列表,每隔几秒钟更改一次,那么您就有足够的时间不用使用AJAX进行更新,而只需依赖服务器生成的用户列表即可。

如果没有,请将上次更新列表的时间存储在变量中,并在通过AJAX进行更新时将时间作为参数发送到服务器,然后让服务器快速检查添加了哪些新用户,并仅发送这些用户。然后,将新服务器的新数组与旧的数组合并。不过,我强烈建议不要每10秒打一次电话,换一个新名字。您不仅会在您的服务器上运行更多的带宽,而且当它必须为您找到列表中的下一个用户并发送给您时,您将增加CPU的使用。对于良好的实践,总是让客户做尽可能多的工作,而不会有滞后。只有一台服务器,但有更多的客户端。您转移到客户端的每个操作将节省您的服务器数百(如果不是数千)操作。

至于长轮询与setInterval之间的关系,我建议在这种情况下使用setInterval。您至少可以发送带有time参数的请求,指定最后的更新时间,因此只需要发送小部分,而不是整个数据数组。

代码语言:javascript
复制
var storage = new Array(user1, user2, ...); //set all your data here, generate it from your server
var lastUpdate = //set the last time you updated it, just create a date variable

function rotateUsers()
{
    //do your fade in and fade out here
}

function update()
{
    //create a new HttpRequest, and then set the url as "yoursite.com/update?lastUpdateTime="+lastUpdate;
    //Take the response data, and merge the new users list with the old one
}
setInterval('rotateUsers()',10000);
setInterval('update()',60000); //update once a minute
票数 6
EN

Stack Overflow用户

发布于 2010-11-06 17:41:25

长轮询将比setInterval(fn,delay)更好,因为至少在准备就绪时,服务器只会发送更新过的数据,而客户端则会做出这样的假设,然后对可能没有更改的数据发出请求。

如果您控制了client/server技术,您可以使用WebSockets将数据推送到客户端,而无需在每次推送时重新连接XHR。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4114268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档