web前端

测试vue内存泄漏

2022-04-11  本文已影响0人  姜治宇

如果不注意释放资源,就会造成内存泄漏,看这样一个例子:
home.vue:

<template>
  <div>
   <hello v-if="show"></hello>
   
   <Button @click="toggle">开关</Button>  
   
  </div>


</template>
<script>
    import hello  from './hello.vue';
    export default {
        name: 'Home',
        components:{ hello },
        data () {
            return {
              
                show: false,
            }
        },

        methods: {
            toggle(){
                
                this.show = !this.show;
               
            }
        }
    }
</script>

hello.vue:

<template>
  <div class="hello">
    {{msg}}
  </div>
</template>

<script>

import {firstName,foo} from './tools.js';
export default {
  name: 'hello',
  mounted(){
    console.log('enter hello');

    window.addEventListener('resize',this.resizeWin,false);
  },
  beforeDestroy(){
     console.log('leave hello');
    //window.removeEventListener('resize',this.resizeWin);
  },
  data () {
    return {
      msg: 'hello,world'
    }
  },
  methods: {
    resizeWin(){
      console.log(Math.random());
    }
  }
}
</script>

如果mounted生命周期里的resize事件不注销,那么执行多次开关后,内存情况就会变成这样:


add.png

可以看到代表注册事件的黄色线一直飙升。
如果我们在beforeDestroy注销resize的话,内存就降下来了,这才是健康的:


remove.png
上一篇下一篇

猜你喜欢

热点阅读