浏览器:喔唷,崩溃啦!

官方说明:

https://support.google.com/chrome/answer/95669?visit_id=637147583639250344-892483008&p=e_awsnap&rd=1

现象:

浏览器打开一个vue页面,当前页面使用定时器每秒调后台接口一次,长时间停留在此页面,大约半天时间,浏览器显示:喔唷,崩溃啦!

定位问题:

在这里插入图片描述
浏览器标题栏空白处点击右键-任务管理器,可以看到对应页面的进程的运行状况。
通过监控发现,问题页面内存持续上升,明显比其他页面高了很多,存在异常。

思考:

1、怀疑定时器导致内存上升,但是写了个很简单的定时器刷新时间,并不会导致内存上升。
2、怀疑调用接口返回的数据量过大导致内存上升,但是模拟相同数据量,通过定时器每秒生成一个随机对象也不会导致内存上升。
3、那就是接口的问题了,换另一个接口也存在同样的问题。
最后发现,调用接口时将请求存到一个全局变量的数组(为了取消请求用),而路由没有跳转,数组一直没有被清空,全局变量逐渐增大内存使用能不往上涨嘛!!!

结论:

循环调用时,往全局变量不停set值,导致浏览器内存激增。
对于定时器不停请求的请求,就不要往全局变量里面放了,万不得已的话要想办法不要让全局变量持续增大!!!
同时,使用定时器前,一定要清除上一个定时器。

// 查询无误开启定时器
clearTimeout(self.timer)
self.timer = setTimeout(() => {
  if (self.timerFlag) self.getData3D()
}, 3000)

当然了每秒刷新建议使用websocket,奈何后台暂不提供。。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值