前端工程师必备之----内存泄露

什么是内存

     内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。

 造成内存泄露的原理:

    new了一个对象之后,它申请占用了一块堆内存,当把这个对象指针置为null时

或者离开作用域导致被销毁,那么这块内存没有人引用它了在JS里面就会被自动垃圾回收。

但是如果这个对象指针没有被置为null,且代码里面没办法再获取到这个对象指针了,就会导致无法释放掉它指向的内存,也就是说发生了内存泄露。

内存泄露的原因:

1.循环引用

   第一种:多个对象循环引用

       var a=new Object;

        var b=new Object;

        a.r=b;

        b.r=a;

    第二种:循环引用自己

       var a=new Object;

        a.r=a;

2.闭包

3.全局变量

4.没有清理的DOM元素引用

5.被遗忘的定时器以及其中的引用

 

如何排查:

      google 调试工具 Memory Profiles

 

如何处理:

      避免循环引用等发生源

      变量导致的内存泄露,将变量清除 a = null

      事件监听导致的内存泄露,监听后移除


 

VUE

  v-if指令产生的内存泄露:

     就是非常常见的比如我们通过v-if删除了父级元素,但是并没有移除父级元素里的dom片段。通常产生于使用第三方库的时候,比如下面的示例中,我们加载了一个带有非常多选项的选择框,然后我们用到了一个显示/隐藏按钮,通过一个 v-if 指令从虚拟 DOM 中添加或移除它。这个示例的问题在于这个 v-if 指令会从 DOM 中移除父级元素,但是我们并没有清除由第三方库 新添加的 DOM 片段,从而导致了内存泄漏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值