面试题-知识深度

如何检测js内存泄漏?js内存泄漏场景有哪些

内存泄漏
可使用 Chrome devTools 的 Performance和Memory 工具来检测js 内存

  • heap锯齿状是是没有内存泄漏
  • heap曲线上升是存在内存泄漏

内存泄漏场景(以vue为例)

  • 被全局变量、函数引用,组件销毁时未清除
  • 被全局事件、定时器引用,组件销毁时未清除
  • 被自定义事件引用,组件销毁时未清除
解决方法
// 事件监听器及时销毁
mounted() {
   
  window.addEventListener('scroll', this.handleScroll) 
} 
beforeDestroy() {
   
  window.removeEventListener('scroll', this.handleScroll)
}
// 定时器及时销毁clearTimeout,clearInterval
mounted() {
   
  this.timer = setInterval(this.handleTimer, 1000)
}
beforeDestroy() {
   
  clearInterval(this.timer)
}
// EventBus 的事件解绑
mounted () {
   
 this.$EventBus.$on('handleScroll', res => this.func(res))
},
destroyed () {
   
 this.$EventBus.$off('handleScroll')
}
// 弱引用
const wMap = new weakMap()
function fn() {
   
  const obj = {
    x: 100 } // 会销毁
  wMap.set('a', obj ) 
  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值