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

2024-01-19

我尝试使用以下命令每 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(使用前将#替换为@)

如何每 10 秒发出一次 Ajax 请求(长轮询除外)? 的相关文章

随机推荐

  • 将附加参数传递给 post_save 信号

    我的 Django 应用程序中有一个用户注册表单 当用户尝试注册时 它会收集其他数据 例如地址 城市 国家 地区 电话号码等 该数据通过以下方式保存在 Account 模型类中post save信号 用户创建过程是这样的 Function
  • Git 克隆代替

    git克隆不支持insideOf吗 我尝试过 git v1 8 3 1 和 v2 16 5 我的 gitconfig 包含 url home USER pub insteadOf GITPUB 添加遥控器时替换效果很好 但克隆时则不然 gi
  • Python 多处理退出错误

    当我按 Ctrl C 退出我的应用程序时 我看到了这一点 Error in atexit run exitfuncs Traceback most recent call last File usr lib python2 6 atexit
  • 星级评定,实施 Wilson 评分区间

    class Rating public static function ratingAverage positive total power 0 05 if total 0 return 0 z Rating pnormaldist 1 p
  • DOS.h 中的 C/C++ REGS 联合不再可用。还有其他选择吗?

    我不得不使用大约二十年前编写的一个非常古老的库 除了使用 REGS 联合的部分之外 我几乎完全编译了它 从我所做的Google搜索来看 REGS是DOS h文件中中断处理的一部分 好吧 看看现代版本的 DOS h 我们看不到任何 REGS
  • Java 线程和同步块

    假设我正在执行一个synchronized某个线程内和内的代码块synchronized我调用一个方法 该方法生成另一个线程来处理需要与第一个方法相同的锁的同步代码块 所以在伪 Java 代码中 public void someMethod
  • 是否可以使用媒体查询将一个 CSS 文件包含到另一个 CSS 文件中?

    我有一个很大的 CSS 文件 我想在使用媒体查询的特殊情况下包含其他 CSS 文件 使用安全吗 import在 CSS 中是这样的 media only screen and max width 480px import url css s
  • 如何在 Windows 中运行 makefile

    我有包含文件的文件夹 如何运行makefile 在控制台中我输入 make它说没有找到 makefile 尝试使用 MSYS http www mingw org wiki MSYS http www mingw org wiki MSYS
  • 如何使 Bootstrap 弹出窗口与单独元素中的 HTML 内容一起使用

    我正在将 Bootstrap 面板与 Bootstrap 弹出框功能相结合 目标是当用户将鼠标悬停在面板标题上时显示弹出窗口 我已经让这个工作了 除了data content 当其中包含大量 HTML 时 该部分会变得非常难以管理 下面是我
  • 将服务器端事件添加到扩展器控件

    我有一个扩展控件 可以提升文本框的OnTextChanged用户完成输入后 500 毫秒发生事件 问题在于OnTextChanged当文本框失去焦点时引发 这会导致问题 因为回发 我想做的是给扩展器控件它自己的服务器端事件 比如说 OnDe
  • 如何使用 ggplot2 剪切、裁剪或白色填充紧紧包围多边形外部的矩形

    我只是想用白色填充简单多边形之外的区域 出于某种原因 它在中心画了一根奇怪的木桩 就像它认为这是一个吸血鬼杀手或其他什么东西一样 搞砸了 我尝试跟随这个帖子 https stackoverflow com questions 2128664
  • Vue.js 路由器:历史模式和 AWS S3 (RoutingRules)

    我有一个使用 Amazon S3 和 Cloudflare 启动并运行的 Vue js 应用程序 当我打开索引并浏览到 dashboard 时 一切正常 但是 当我直接在新选项卡中打开仪表板之类的路线或刷新页面时 我从 S3 收到以下错误
  • RoR 设计:sign_in 总是返回无效的电子邮件/密码

    每次登录时 我都会收到错误消息 表明电子邮件 密码无效 routes devise for users devise scope users do get users sign out gt devise sessions destroy
  • 最好的异常处理策略应该是什么

    我正在开发用户从 UI 调用方法的应用程序 在此我从业务类调用一个方法 该方法调用另一个方法 用户界面 gt 方法1 gt 方法2 gt 方法3 如果任何方法中发生任何异常 我想向用户显示错误消息 我应该直接向调用者方法抛出异常吗 在 UI
  • Discord JS - 如何对同一个嵌入多次做出反应?

    我只拿到了第一个 钱袋子 表情符号对频道中的最新消息做出反应 这是机器人发送的嵌入 但是 我希望机器人对新嵌入做出反应 钱袋子 and ticket 表情符号 到目前为止它会与 钱袋子 表情符号 但是 当它尝试与 ticket 表情符号 如
  • Angular 6 Firebase 快照返回未定义

    我正在将对象上传到我的数据库 然后尝试检索所有项目 在第二步中我遇到错误 我的对象类 export class Data key string name string address string address2 string pscod
  • Sublime Text 2:如何在不移动光标的情况下向上/向下翻页

    我使用的是 OS X 10 8 4 ST2 当我使用 Home 和 End 键时 视口移动并且光标保持不变 这是标准的 Mac 行为 也是我所期望的 但是 当我使用 Page Up pageup pgup 和 Page Down paged
  • Python3 shebang 线未按预期工作

    我在 Solaris 环境中运行 Python 脚本时遇到以下问题 看来我在 shebang 线上做了一些不正确的事情 但我无法判断这是 Python 3 问题还是命令行问题 但我怀疑它与 shebang 行有某种关系 因为当我在命令行上显
  • “砰”或“!”是什么意思?在 git 命令之前?

    正如您从这段摘录中看到的 有一个 在 git 命令之前 重点是什么 alias commitx git add git commit https stackoverflow com a 8956546 1354543 https stack
  • 如何每 10 秒发出一次 Ajax 请求(长轮询除外)?

    我尝试使用以下命令每 10 秒从服务器请求一个 json 对象 setInterval function ajax url success function data do stuff with data 10000 但这不是很有效 我了解