菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2861
1

记一次 vue 的异步更新队列导致内存泄漏

原创
05/13 14:22
阅读数 1404

起因

由于项目是需要连续传输图片形成一个伪视频(没办法,客户钱给的不够)来观看。后端采用传输base64的图片到前端展示。

环境

php: 7.2

workerman: 3.X

vue: 2.X

过程

workerman与树莓派进行socket连接,树莓派通过摄像头将视频截取为一张张的图片发送到workermanworkerman再将图片转为base64的格式通过websocket传输到前端vuevue接收到消息后将base64赋值到变量中。

<img  src="'data:image/png;base64,'+videobox.image" >
var vm = new Vue({
    data: {
        videobox: {
           image: "",
        }
    },
    method: {
        getImage: function(data) {
                this.videobox.image = data.image
        }
    }
})

由于后端会一直传输base64格式的图片到vue上,所以video.image会不断的刷新,但是内存却忽然间爆涨了起来

记一次vue的异步更新队列导致内存泄漏

一张图片才几十k,内存却几秒钟涨到了G的级别,所以怀疑是内存泄漏了。

查阅了文档后发现 异步队列更新

记一次vue的异步更新队列导致内存泄漏

也就是说每一次的数据更新都会进入到队列中,并且缓存了起来.....所以我的内存才爆涨了起来。。

解决方案也有,就是采用$nextTick()方法来刷新队列。。

<img  src="'data:image/png;base64,'+videobox.image" >
var vm = new Vue({
    data: {
        videobox: {
           image: "",
        }
    },
    method: {
        getImage: function(data) {
                this.$nextTick(function() {
                    this.videobox.image = data.image
                });
        }
    }
})

修改代码后内存再也没有上过G级别了。。

记一次vue的异步更新队列导致内存泄漏

发表评论

0/200
2861 点赞
1 评论
收藏
为你推荐 换一批