内存泄露的解释:
程序中己动态分配的堆内存由于某种原因未释放或无法释放。
根据JS的垃圾回收机制,当内存中引用的次数为0的时候内存才会被回收 全局执行上下文中的对象被标记为不再使用才会被释放
内存泄露的几种场景
1、全局变量过多
通常是变量未被定义或者胡乱引用了全局变量
function a(){
b=10;
}
a();
b++;
setTimeout(()=>{
console.log(b)
},1000)
2、闭包。
未手动解决必包遗留的内存引用。定义了闭包就要消除闭包带来的副作用。
function closuer (){
const b = 0;
return (c)=> b + c
}
const render = closuer();
render();
render = null;
3、事件监听未被移除
function addEvent (){
const node = document.getElementById('warp');
node.addEventListener('touchmove',()=>{
console.log('In Move');
})
}
const onTouchEnd = (){
const node = document.getElementById('warp');
node.
}
useEffect(()=>()=>{
const node = document.getElementById('warp');
node.removeEventListener('touchmove');
})
render(<div id='warp' onTouchEnd={onTouchEnd}>
</div>)
4、缓存。
建议所有缓存都设置好过期时间。
|