起因

最近的一个vue项目要求页面5秒一次实时请求数据, 最开始考虑的是建立websocket长连接进行通信,但是在数据量较大时socket链接会自动断开,后台也没有找到解决办法,最后决定由前端发送定时请求, 但是在使用过程中出现了长时间挂机页面会出现浏览器崩溃的情况

后经过测试是setInterval方法造成的(原因没有搞懂)

解决方案

使用requestAnimationFrame方法代替setInterval进行实时请求

export function RAFInit () {let RAF = {intervalTimer: null,timeoutTimer: null,setTimeout (cb, interval) { // 实现setTimeout功能let now = Date.nowlet stime = now()let etime = stimelet loop = () => {this.timeoutTimer = requestAnimationFrame(loop)etime = now()if (etime - stime >= interval) {cb()cancelAnimationFrame(this.timeoutTimer)}}this.timeoutTimer = requestAnimationFrame(loop)return this.timeoutTimer},clearTimeout () {cancelAnimationFrame(this.timeoutTimer)},setInterval (cb, interval) { // 实现setInterval功能let now = Date.nowlet stime = now()let etime = stimelet loop = () => {this.intervalTimer = requestAnimationFrame(loop)etime = now()if (etime - stime >= interval) {stime = now()etime = stimecb()}}this.intervalTimer = requestAnimationFrame(loop)return this.intervalTimer},clearInterval () {cancelAnimationFrame(this.intervalTimer)}}return RAF
}

调用:

import {RAFInit} from '文件路径'getAll () {console.log('实时请求的数据')
},
startSetInterval() { // 启用实时请求this.RAF = RAFInit()this.RAF.setInterval(this.getAll, 5000)
}
stop () {  // 关闭实时请求if (this.RAF) {this.RAF.clearInterval()this.RAF = null}
}

处理setInterval造成的浏览器内存溢出相关推荐

  1. chrome浏览器内存溢出分析

    chrome内存溢出问题需要我们在开发者工具中去定位. 一边情况下去记录两次的操作后的内存情况,第一次,是记录首次操作后的内存情况,第二次是操作后的内存使用情况,然后进行对比. 废话少说看图. 第一次 ...

  2. ajax timeout 内存溢出,setInterval 和 setTimeout会产生内存溢出

    setInterval 和 setTimeout会产生内存溢出 来一个简单的例子.有兴趣的朋友可以自己尝试 复制代码 代码如下: function a(){ document.title = &quo ...

  3. chrome浏览器js内存溢出

    Google Chrome 浏览器 提供了非常强大的JS调试工具,Heap Profiling便是其中一个.Heap Profiling可以记录当前的堆内存(heap)快照,并生成对象的描述文件,该描 ...

  4. 添加IFrame导致内存溢出的解决过程(IE浏览器,目前发现了原因,还未解决)...

    1.  现象 每次动态添加iframe时,iexplore.exe进程占据的内存都会增加(大概10M左右),不会自动释放,最终导致内存溢出 2.  解决过程 经过网络的一番搜索,基本上给出的解决方案是 ...

  5. js垃圾回收机制,内存泄露和内存溢出,解决闭包产生的内存泄露详解

    一.内存的周期和回收机制 分配内存----->使用内存----->释放内存 1.JS 环境中分配的内存有如下声明周期: 内存分配:当我们声明变量.函数.对象的时候,系统会自动为他们分配内存 ...

  6. node aws 内存溢出_如何使用Node.js和AWS快速创建无服务器RESTful API

    node aws 内存溢出 by Mark Hopson 马克·霍普森(Mark Hopson) 如何使用Node.js和AWS快速创建无服务器RESTful API (How to quickly ...

  7. 记一次内存溢出的分析经历

    作者:Janti https://www.cnblogs.com/superfj/p/8474288.html 说在前面的话 朋友,你经历过部署好的服务突然内存溢出吗? 你经历过没有看过Java虚拟机 ...

  8. Linux下tomcat内存溢出分析及优化

    为什么80%的码农都做不了架构师?>>>    常见的内存溢出有以下两种: java.lang.OutOfMemoryError: PermGen space java.lang.O ...

  9. Node的垃圾回收机制与内存溢出捕获(上)

    Node的垃圾回收机制与内存溢出捕获 一.什么是Node的内存?   想必大家在用JavaScript开发的过程中,不太关心内存的管理,因为对于前端来说,浏览器的内存几乎不会出现用完的情况,因为所接触 ...

最新文章

  1. 面向对象编程(OOP)----BLUE大师JS课堂笔记(二)
  2. Spring的常用下载地址
  3. C#编写简单的聊天程序
  4. linux上docker安装centos7.2
  5. 光影之路 GPU架构发展史(1/4)
  6. ModuleNotFoundError: No module named ‘sklearn‘ 解决办法
  7. 兆能Z82机顶盒-卡刷-刷机固件
  8. C#编程,byte 与 int 相互转换
  9. 诡异大阳飙升动因何在
  10. 使用代理服务器哪些风险?
  11. java中美元符号的作用_MyBatis中#号与美元符号的区别
  12. 微信公众号的二次开发(一 订阅号没有获取网页授权的解决方法)
  13. 【毕业设计_课程设计】基于移动设备的眼球追踪技术及其应用(源码+论文)
  14. 从语音通话和视频通话两个方面搭建专属于自己的私有化部署的视频会议通话系统
  15. 大数据开发和大数据分析的区别?
  16. python全栈工程师薪水_Python工程师薪资待遇是多少?老男孩Python周末班
  17. uniwide服务器不能进入系统,AMD四核心K10 Opteron处理器下月底出货
  18. Origin 在已画图中添加新的数据曲线
  19. 利用sfntly的sfnttool.jar提取中文字体
  20. File类(Java)

热门文章

  1. 软件测试入门简单么?入行后如何做职业规划
  2. layer的弹出层的简单的例子
  3. 硬件经典面试 100 题
  4. 什么是爱情?什么是婚姻?
  5. 深圳大学计算机专业评级,全球1355所大学学科评级结果:深圳大学13个学科获评A类...
  6. Google未来半年内的杀手锏预测
  7. 如何使用mount命令远程挂载
  8. 请求rest服务,报网页406问题解决办法
  9. 无人机系列之飞控算法
  10. Aisen新浪微博客户端项目源码