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

发布于 2022-09-12 04:00:11 字数 287 浏览 9 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

多情出卖 2022-09-19 04:00:11

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

筱武穆 2022-09-19 04:00:11

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

class Test{
    destroy() {
    }
}

var test = new Test()
// do some thing
test.destroy()
// 置空引用,
test = null
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文