项目主要做的是UWB人员定位,前端用three去做的可视化地图。但是出现一个问题,会出现内存泄露,内存随时间一直增加。导致最后内存大了之后浏览器崩溃。
后端数据通过websocket传到前端,将坐标储存到数组中,本次添加了一个watch去监听数组的变化。
函数为
watch:{
positions: {
handler(newVal, oldVal) {
console.log('1',newVal);
console.log(oldVal);
}
},
注:其中positions是储存的数组,里面是一组数,我是定义在全局变量中,handler不用修改,此函数里面写调用函数。
一开始我设置数组变化之后,先移除原有的模型,再调用模型的初始函数。
watch:{
positions: {
handler(newVal, oldVal) {
console.log('1',newVal);
console.log(oldVal);
this.scene.remove(this.meshb)//meshb为全局变量的模型
this.meshb=null
this.hou()//meshb模型的初始函数
}
},
但是这样会出现一个问题,就是模型的一些细节没有移除,导致内存一直增加。
所以又添加了移除模型的材质等细节的函数
this.meshb.material.dispose();
this.meshb.geometry.dispose();
经过以上改进之后,不会出现内存泄露和内存随着时间的增加而增加的现象,实现了清除模型以及其附属材质等内存。