我尝试使用以下命令每 10 秒从服务器请求一个 json 对象:
setInterval(function(){
$.ajax({
url: '/',
success: function(data){
//do stuff with data
}
});
}, 10000);
但这不是很有效。我了解长轮询,但我认为这不会产生很大的影响。我know我每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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)