我正在尝试使用此方法每10秒从服务器请求一个json对象:
setInterval(function(){
$.ajax({
url: '/',
success: function(data){
//do stuff with data
}
});
}, 10000);
但这不是很有效。我知道长轮询,但是我认为这不会有很大的不同。我知道我将每10秒钟接收一次新数据,因此就效率而言,长轮询是否与setInterval完全相同?
浏览器端缓存是否可以很好地解决此问题?
我将得到的JSON对象如下所示:
var data = {1: {'user': 'John', 'age': '25'}, {2: {'user': 'Doe', 'age': '30'}}
这样,我想显示data [0] .user几秒钟,然后通过使用'fadeOut'和'fadeIn'等将其平滑地更改为data [1] .user,直到用完为止。
我基本上想创建一个用户名的幻灯片显示。
缓存将是一个好的解决方案,还是我应该坚持每10秒进行一次Ajax调用?如果是这样,那我将如何实现?如果没有,我应该使用哪种方法?
我不确定我的解释是否足够好,所以请告诉我是否仍然不清楚。
最佳答案
我一定会考虑缓存。尤其是如果您获得的用户数量更多,则每10秒发出AJAX请求可能会很容易使服务器过载。但是,如果您想保持简单,请每隔几分钟发出请求进行更新。缓存用户,将其生成到javascript代码中,比如说users = new Array(user1,user2,...)。如果它不是那么重要,那么您实际上不必继续更新页面,因为大多数用户无论如何都会在一两分钟之内离开。如果您有一个长列表每隔几秒钟更改一次,那么您将有足够的时间不必使用AJAX进行更新,而只需依靠服务器生成的用户列表即可。
如果不是,请在变量中存储上次更新列表的时间,然后在通过AJAX更新时将时间作为参数发送给服务器,然后让服务器快速检查添加了哪些新用户,并仅发送那些新用户。 。然后,只需将新服务器的新阵列与旧服务器合并。我强烈建议您不要每10秒钟拨打一次新名字的电话。您不仅会在服务器上运行更多带宽,而且在必须在列表中为您找到下一个用户然后将其发送给您时,还会增加CPU使用率。作为良好实践,请始终让客户尽可能多地完成工作,而不会出现滞后。只有一台服务器,但是有更多的客户端。您转移到客户端的每个操作将为您的服务器节省数百甚至是数千的操作。
至于长轮询与setInterval,在这种情况下,我建议使用setInterval。您至少可以发送带有时间参数的请求,指定最后的更新时间,因此只需要发送一小部分而不是整个数据数组。
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