Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
525 views
in Technique[技术] by (71.8m points)

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...