读了vue的destory源码感觉有内存泄漏的问题,有没有人指教一下?
用v-if来控制子组件显示,子组件调用了$destroy
方法,看了下里面的代码,有解除父子关系,去掉watch监听,加标志声明已经摧毁了等处理,但是这个组件对象其实还是存在的,我在用setTimeout
赋值给一个被销毁的组件的时候,发现也没有报错能打印出来(这和react不一样),我就存有疑问了,难道v-if不会销毁之前的组件而是重新创建新的组件吗,我又写了个例子验证了一下,发觉多次v-if后,内存明显变高没有降下来,这样来说其实用v-if销毁的组件其实还是存在内存种,难道vue其实有内存泄漏的风险吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我发现问题了,旧的子组件对象确实没有被其他地方引用所以他是可以被gc回收的,它不能被回收的原因是我在mounted里console.log了这个子组件对象,我注释了就可以被回收了,搞了半天console.log这个方法会把保存打印对象的引用所以不能被回收啊,所以生产环境不能用这个。
网上也有人这么说的:https://segmentfault.com/a/11...
JS没有内存管理接口,无法主动释放内存.
所以类的销毁只能做到去除副作用,做不到销毁实例--->这一步是交给调用者自己处理的,通过将引用置空的方式,然后等待引擎GC,回收内存.