读了vue的destory源码感觉有内存泄漏的问题,有没有人指教一下?

用v-if来控制子组件显示,子组件调用了$destroy方法,看了下里面的代码,有解除父子关系,去掉watch监听,加标志声明已经摧毁了等处理,但是这个组件对象其实还是存在的,我在用setTimeout赋值给一个被销毁的组件的时候,发现也没有报错能打印出来(这和react不一样),我就存有疑问了,难道v-if不会销毁之前的组件而是重新创建新的组件吗,我又写了个例子验证了一下,发觉多次v-if后,内存明显变高没有降下来,这样来说其实用v-if销毁的组件其实还是存在内存种,难道vue其实有内存泄漏的风险吗?

阅读 338
评论
    2 个回答

    我发现问题了,旧的子组件对象确实没有被其他地方引用所以他是可以被gc回收的,它不能被回收的原因是我在mounted里console.log了这个子组件对象,我注释了就可以被回收了,搞了半天console.log这个方法会把保存打印对象的引用所以不能被回收啊,所以生产环境不能用这个。
    网上也有人这么说的:https://segmentfault.com/a/11...

      • 2.1k

      JS没有内存管理接口,无法主动释放内存.
      所以类的销毁只能做到去除副作用,做不到销毁实例--->这一步是交给调用者自己处理的,通过将引用置空的方式,然后等待引擎GC,回收内存.

      class Test{
          destroy() {
          }
      }
      
      var test = new Test()
      // do some thing
      test.destroy()
      // 置空引用,
      test = null
        撰写回答

        登录后参与交流、获取后续更新提醒

        相似问题
        推荐文章