Vue: 使用异步组件时的内存泄漏

创建于 2018-08-31  ·  3评论  ·  资料来源: vuejs/vue

2.5.17

复制链接

https://codesandbox.io/s/4k43rylw0

重现步骤

  1. 加载复制器并拍摄内存堆快照。 搜索堆,您会发现4个VueComponents(应用程序,容器,子项,异步子项)
    image

  2. 单击销毁按钮。 这将切换v-if,它将删除Child组件,并因此也删除AsyncChild组件。

  3. 此时,页面已按预期更新
  4. 拍摄另一个内存堆快照。 再次在堆中搜索“ VueComponent”,您将看到4个VueComponents仍然存在
    image
    image

期望什么?

销毁子组件之后,应销毁该组件及其异步加载的子组件,并释放内存。

实际发生了什么?

Vue坚持使用上下文引用,以防止这些组件被垃圾回收


发生这种情况是由于位于此处的resolve-async-component逻辑: https :

在第64行的forceRender函数中,调用$ forceUpdate之后,应清除contexts数组以释放那些引用,以便以后可以对这些组件进行垃圾回收。

bug has PR

最有用的评论

我也可以为此问题提交PR的修复程序,谢谢

所有3条评论

我也可以为此问题提交PR的修复程序,谢谢

公关在这里提交: https

@LinusBorg

我看到您在此问题上添加了一些标签。 我还需要做些其他事情来启动引用的请求请求的审阅过程吗?

谢谢!

此页面是否有帮助?
0 / 5 - 0 等级