有没有人有vue中使用websocket获取数据后使用vue.set渲染数据导致内存溢出的经历?

王文銮 2019-01-30 02:17:06
### 问题描述
在我们的项目中,前后台使用websocket连接,整个项目使用的vue框架。websocket后台传输频率为**4次/s**,每次的数据量为**2KB**。前台使用onmessage方法接收到数据之后进行处理并使用this.$set()方法将数据更新进数组中。在这个过程中出现了内存泄露的问题,表现形式为chrome内存急剧升高。

### 自己尝试过哪些方法
在百度和google之后,并经过自己的测试,发现Vue过于频繁的使用this.$set方法会导致内存泄漏,而直接赋值进行替换则不会,于是将所有的this.$set方法更新数据改为了重新复制,发现有效降低了内存泄露的问题。但是并没有完全解决。在测试中,我将websocket的onmessage方法全部注释掉之后,发现chrome内存上涨的情况于前面修改之后上涨的速度一致。当将websocket整个注释掉之后chrome内存才不再上涨。



### 期待的结果
希望在使用websocket的过程中chrome内存不在继续上涨,麻烦大佬看一下是vue使用的有问题还是websocket
...全文
1776 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
苹果加糖 2019-08-14
  • 打赏
  • 举报
回复
你好,你这个问题解决了吗?我现在也遇到了内存升高导致浏览器崩溃的问题。
王文銮 2019-01-30
  • 打赏
  • 举报
回复
引用 3 楼 讨厌走开啦 的回复:
1秒4次也太频繁了,浏览器处理websocket推送的消息也要消耗性能(猜测浏览器处理消息是有队列的,当处理不过来的时候就会排队,然后队列越来越长直到爆掉,体现出来就是内存一致在上涨,然后过一段时间浏览器崩溃),你试试把频率降下来问题自然就解决了。

经验证确实是这样的情况,但是客户硬需求是要求1秒4次,我们在看看有什么解决方案吧
讨厌走开啦 2019-01-30
  • 打赏
  • 举报
回复
1秒4次也太频繁了,浏览器处理websocket推送的消息也要消耗性能(猜测浏览器处理消息是有队列的,当处理不过来的时候就会排队,然后队列越来越长直到爆掉,体现出来就是内存一致在上涨,然后过一段时间浏览器崩溃),你试试把频率降下来问题自然就解决了。
王文銮 2019-01-30
  • 打赏
  • 举报
回复
引用 1 楼 丰云 的回复:
从描述看,应该是双方都有问题,

websocket吃内存本身就是常规现象。

您好,后端有问题的话不应该表现在chrome内存升高吧?我是单纯的疑问,之前不怎么用websocket。您的意思是用了websocket普遍会内存升高是么?我进一步进行了测试,只是连接上websocket内存并不会升高,只有当后台开始发送数据之后,chrome的内存才会开始上涨。如果是websocket的问题的话,是什么原因呢?会是之前的消息没有被清除的原因么?有没有什么解决方案呢?
丰云 2019-01-30
  • 打赏
  • 举报
回复
从描述看,应该是双方都有问题, websocket吃内存本身就是常规现象。

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧