美文网首页
内存泄漏

内存泄漏

作者: 李霖弢 | 来源:发表于2021-03-26 13:44 被阅读0次

常见的内存泄漏场景

  1. vue组件中定义的计时器不会在组件被销毁时自动销毁,需在beforeDestroy中手动清除
  2. vue组件中通过addEventListener/$on添加的事件不会在组件被销毁时自动销毁,需在beforeDestroy中手动removeEventListener/$off
  3. 闭包,通过解除对匿名函数的引用释放内存
function outerFun(outerArg){
    return function(){
        console.log('这里是内部匿名函数')
        console.log('可以访问包含函数的变量',outerArg)
    }
}
var create = outerFun("hi") //创建一个函数,是outerFun中返回的匿名函数
create() // 调用函数,是调用匿名函数
create = null // 释放对匿名函数的引用 
  1. 变量指向一个dom元素后dom元素从页面移除,需手动清理该变量。也可使用WeakSet和WeakMap储存 DOM 节点,而不用担心这些节点从文档移除时,会引发内存泄漏。

如何发现内存泄漏

内存泄漏时,内存会不断增长,通过开发者工具进行判别。

  1. Performance
    打开谷歌开发者工具,切换至 Performance 选项,勾选 Memory 选项,点击开始录制。根据走势图进行判断是否存在内存泄漏


  2. Memory
    打开谷歌开发者工具,切换至 Memory选项,每次点击左上角圆点即可获取一份当前内存情况的快照。在搜索框还可以通过对象构造函数/类进行搜索。

  • Shallow Size
    该数据结构自身占用的内存, 不包括其引用的其他实例
  • Retained Size
    当实例被回收时, 可以同时被回收的实例的Shallow Size之和


相关文章

网友评论

      本文标题:内存泄漏

      本文链接:https://www.haomeiwen.com/subject/chljhltx.html