微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何每10秒发出一次Ajax请求(除了长轮询)?

我试图每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'}}

有了这个,我想显示数据[0] .user几秒钟,然后通过使用’fadeOut’和’fadeIn’等顺利地将其更改为数据[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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐