什么是轮询

轮询一开始应该是CPU调度算法里的概念,通俗来说就是CPU每隔一段时间都问下需不需要服务。这个概念延伸到web服务中也类似,前端每隔一段时间去向服务器请求信息。

为什么需要轮询

那为什么要用轮询呢?其实这里说的也算是轮询的优点。
当前端每隔一段时间都要确认一些信息是否有变化时,就需要用到轮询。毕竟前端要获取到服务器状态变更,要么主动拉、要么让服务器推。主动拉的情况,又分为用户行为触发和我们定时去拉,要想信息尽可能新,肯定不能只等用户的行为去触发,也需要我们每隔一段时间去拉。所以我们就得出轮询第一个优点——信息相对较新
除此之外,轮询里面我们还可以把这个软件多个模块都需要的信息请求都封装到一次请求,这样减少了前端的请求数量,可以减少前端多次网络请求的资源耗费,可能也可以减轻服务器负担。第二个优点——减少网络请求数量

服务器主动推?

上面提到了服务器主动推的请求,网页端能做到让服务器主动推吗?不都是HTTP请求吗?HTTP请求其实也有多种方法做到主动推:

  1. 前端以更小的时间间隔去请求,看上去就想服务器主动推一样及时,但耗费资源多
  2. HTTP/2其实也支持主动推,需要服务器那边进行额外的设置,当收到某个请求时,把其他资源也一起返回,但这种要改配置,改完得重启服务,把业务逻辑与服务器配置放一起搞,看上去就很不妥,在实际开发中,一般这是分离的,你控制不到服务器配置。还有一个办法,在响应头加上Link命令,服务器就会带上对应资源。不过不管怎么说,这还不是真正的主动推,仍然要把响应紧跟在请求后,只不过是可以放多几个响应

http://www.ruanyifeng.com/blog/2018/03/http2_server_push.html

  1. 基于HTTP的websocket协议,建立链接后,服务器可随时推,这就是真正的主动推了,但这也有兼容性问题,有些新的api在某些版本的浏览器不支持。而且这也需要后台进行改动,支持新协议、数据一更新就推送给所有监听这个key的后台,这里的后台开销相比传统的请求-响应会不会多很多?看上去当用户量大,当依赖关系一多,内存耗费就会多很多

轮询的缺点

  1. 信息只是相对新,但不是绝对新。比如用户删除、添加、更新某个信息时,如果你这个信息状态的更新是依赖轮询接口的,你不可能在更新成功后,立即调用轮询接口,因为前面说过轮询接口可能会封装很多模块的请求,立即更新的耗费是很大的,可能很多信息都不是必要的。我这里的做法是,前端在确认信息更新成功后,先显示假数据给用户(前端构造的更新后的数据)。前提是后端告知前端信息的确更新成功,且下次轮询一定返回了新数据,这个后端还是应该要保证到的。当然,你也可以要求后端同学给封装一个新的接口,单独给你返回你需要的数据,但相比写假数据,哪个开发成本低、维护成本低其实一目了然。

总结

轮询获取数据在某些情景下是必要的,但可能因为信息更新的不及时,需要做一些兼容逻辑。

web前端轮询获取数据的定义及优劣相关推荐

  1. 还在使用Future轮询获取结果吗?CompletionService快来了解下。

    背景 二胖上次写完参数校验(<二胖写参数校验的坎坷之路>)之后,领导一直不给他安排其他开发任务,就一直让他看看代码熟悉业务.二胖每天上班除了偶尔跟坐在隔壁的前端小姐姐聊聊天,就是看看这些枯 ...

  2. web前端埋点及数据上报

    web前端埋点及数据上报 简介 前端埋点即在产品客户端获取用户行为和使用情况的一种监控方式.通过埋点可以获取到用户行为数据,借助这些数据,我们可以从用户角度出发,升级迭代产品,使其更加贴近用户使用习惯 ...

  3. $get服务器上的json文件,Web前端:$.getJSON获取json数据失败

    JSON(JavaScriptObjectNotation,JS对象简谱)是一种轻量级的数据交换格式.它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本 ...

  4. vue ajax轮训,VUE前端轮询实现

    第一次轮询实现 在data中定义 timer:null setTimer方法实现如下: 在打码的方法(方法1)中判断是否需要轮询,状态变更后调用方法:clearInterval(this.timer) ...

  5. .NET 请求被挂起,前端轮询,委托

    起因:因项目需要监控方法中计算进度,故而想通过AJAX调用,返回前端显示进度,结果开发中遇到第二个AJAX请求被挂起,需要等到第一个请求(计算)完成后,才会被处理到. 百度种种,知其原因是在Sessi ...

  6. web Worker 轮询请求

    // this.timer.terminate(); 关闭workertimerWorker() {console.log("timerWorker");function crea ...

  7. 轮询数据库 java_谁做过定时任务,轮询查询数据。

    一.增加所依赖的JAR包 1.增加Spring的Maven依赖 org.springframework spring-webmvc 3.0.5.RELEASE 2.增加Quartz的Maven依赖 o ...

  8. Web前端工作笔记002---json数据查询的方法_json查询大全,JsonSQL数据查询,jfunk数据查询

    JAVA技术交流QQ群:170933152 json数据查询的方法 网上看到有一篇帖子,有8种json数据查询的方法,大家可以研究一下,我现在分享一下! JsonSQL JsonSQL实现了使用SQL ...

  9. html获取数组的前三个元素,web前端:js 获取数组最后一个元素

    Javascript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在html(标 ...

最新文章

  1. 单个Transformer完成信息检索,谷歌用可微搜索索引打败双编码器模型
  2. 编写音乐播放器的一些感想
  3. 让SAP云平台上的Web应用使用destination服务
  4. OJ4008-糖果【各种dp之3】
  5. java学习(79):GUL聊天窗口
  6. 检测系列--RCNN系列
  7. linux的可执行文件通常放在哪个目录中?写出该目录的路径.,实验2 Linux的基本操作与 使用vi编辑器 2010 (1)...
  8. DataTable 类(一)表结果操作
  9. matlab 文件列表,如何從Matlab寫入多個列表到同一個excel文件?
  10. LICEcap 录制Gif动画
  11. Oracle 动态视图3 V$SESSION
  12. bug是什么意思详细介绍
  13. 新浪微博API错误代码说明对照表
  14. echart折线图删除_echart清空折线图数据
  15. Ubuntu 18.04 安装vsftpd
  16. 智利车厘子的尺寸说明,给大家扫盲
  17. CMD命令行简单学习总结
  18. 用edge调试安卓或者手机app的样式
  19. matlab读取excel数据
  20. Initramfs文件系统的制作

热门文章

  1. 怎么把计算机跟打印机ip固定,打印机设置固定IP的详细图文教程
  2. c++控制台输出星号金字塔
  3. 关于VMP3.5的OEP定位方法分享
  4. 自注册DM(五)中国移动CMCC移动DM适配指南和注意事项和常见问题分析
  5. 有哪些补脑的食物?IT族必备的饮品有哪些?[图]
  6. 分页查询——RowBounds的使用
  7. ANTLR4(四) 基础设计语法
  8. 提升机器学习训练数据多样性,增加医学应用可训练数据量
  9. python 汇编_python 汇编
  10. 三角公式+菲涅尔公式