web前端的内存泄漏

什么是内存泄漏

JavaScript中的内存泄漏就是被分配的内存没有被使用,但是也不能被回收的一种现象。简单来说,我们已经无法再通过js代码来引用到某个对象,但垃圾回收器却认为这个对象还在被引用,因此在回收的时候不会释放它,这样导致内存一直被占用,会导致内存不够用而系统崩溃。

内存泄漏常见的的几种情况

全局变量

全局变量是不可回收的销毁的,所以谨慎使用,如果存入数据过大,可以再用完之后进行清空,设置为null或重新定义。

闭包

根据闭包的特性,内部函数有权访问外部函数的变量对象。所以当fn()执行之后,DOM元素已经存在于内存。

function fn(){  
    var dom = document.createElement("XXX"); 
    dom .onclick = function(){ 
        console.log("DOM被闭包引用,不进行回收处理")
    }
}
fn()
没有清理的 DOM 元素引用
function processData(data) {
  if (!data) {
    return
  }
  const url = window.URL.createObjectURL(new Blob([data]))
  const link = document.createElement('a')
  link.style.display = 'none'
  link.href = url
  link.setAttribute('download', fileName)
  document.body.appendChild(link)
  link.click()
   // document.body.removeChild(link) 记得要手动清除
}
processData(data)
被遗忘的计时器或回调
var times = new Date(); 
setInterval(function() { 
    var dom = document.getElementById('XXXX'); 
    if(dom) { 
        // 处理 dom 和 times 
        node.innerHTML = JSON.stringify(times)); 
    } 
}, 1000);

内存泄漏查找方式

  • 调试工具——Memory——Profiles——Take snapshot
    在这里插入图片描述
  • summary对照表
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值