由於專案是需要連續傳輸圖片形成一個偽視訊(沒辦法,客戶錢給的不夠)來觀看。後端採用傳輸base64的圖片到前端展示。
php
: 7.2
workerman
: 3.X
vue
: 2.X
workerman
與樹莓派進行socket
連線,樹莓派通過攝像頭將視訊擷取為一張張的圖片傳送到workerman
,workerman
再將圖片轉為base64的格式通過websocket
傳輸到前端vue
。vue
接收到訊息後將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
會不斷的重新整理,但是記憶體卻忽然間爆漲了起來
一張圖片才幾十k,記憶體卻幾秒鐘漲到了G的級別,所以懷疑是記憶體洩漏了。
查閱了文件後發現 非同步佇列更新
也就是說每一次的資料更新都會進入到佇列中,並且快取了起來.....所以我的記憶體才爆漲了起來。。
解決方案也有,就是採用$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級別了。。