qiankun icon indicating copy to clipboard operation
qiankun copied to clipboard

退出所有子应用时,如何彻底卸载子应用以释放内存,再次进入时让它重新走bootstrap而不是mount

Open bingxueyinlian opened this issue 3 years ago • 14 comments

子应用退出时调用了unmount,但是内存没释放

因为子应用体积比较大,子应用用完以后回到主应用,希望彻底卸载子应用以释放内存。这样再进入别的子应用时不至于内存占用过大。

复现步骤

1.登录进入主应用,浏览器内存占用为:165M 2.进入子应用A(通过loadMicroApp手动加载子应用),浏览器内存占用为:235M 3.退出子应用A,回到主应用(手动调用子应用的unmount),浏览器内存占用为:246M(没有降,反而升了) 4.再次进入子应用A(没走bootstrap,只执行了mount),浏览器内存占用为:364M(继续升)

  • 内存值均为稳定后,任务管理器的显示值

相关环境信息

  • qiankun 版本 2.4.3
  • 浏览器版本: Chrome 92 64位
  • 操作系统: win10 企业版本

bingxueyinlian avatar Sep 14 '21 02:09 bingxueyinlian

single-spa的接口里有一个singleSpa.unloadApplication('app1');方法,但是参数为appname,这个appname只有调用了registerMicroApps才可以用,但是手动调用loadMicroApp加载的微应用,不能和registerMicroApps一起使用。所以还得请教,这种情况应该如何unload微应用?

bingxueyinlian avatar Sep 24 '21 07:09 bingxueyinlian

你可以考虑动态加载子组件~~ 我这样是可以的。

yurizhang avatar Sep 27 '21 01:09 yurizhang

考虑动态加载子组件~~

具体怎么做,方便上点代码不?

bingxueyinlian avatar Oct 12 '21 09:10 bingxueyinlian

同求,通过loadMicroApp手动加载子应用后,即使调用子应用的unmount,内存依然没有释放,滚雪球一样

zwj9297 avatar Nov 01 '21 11:11 zwj9297

同求,通过loadMicroApp手动加载子应用后,即使调用子应用的unmount,内存依然没有释放,滚雪球一样

看到single-spa中的unregisterapplication 底下描述的,似乎直接取消微应用的注册,也不会从内存中删除。

  • Unregistering an application does not delete it from the SystemJS module registry.
  • Unregistering an application does not delete its code or javascript frameworks from browser memory.
  • An alternative to unregistering applications is to perform permission checks inside of the application's activity function. This has a similar effect of preventing the application from ever mounting.

ViavaCos avatar Dec 09 '21 02:12 ViavaCos

你可以考虑动态加载子组件~~ 我这样是可以的。

可以上点代码吗?

Pusri avatar Jan 04 '22 12:01 Pusri

你可以考虑动态加载子组件~~ 我这样是可以的。

可以上点代码吗?

请问怎么动态加载子组件

Z-Champion avatar Jan 14 '22 01:01 Z-Champion

同求,内存一直没释放

BerthaPeng avatar Apr 01 '22 02:04 BerthaPeng

同求

xjown avatar Apr 16 '22 06:04 xjown

请问此问题是否有已有解决方案?

WuBin88996 avatar May 06 '22 03:05 WuBin88996

你可以考虑动态加载子组件~~ 我这样是可以的。

能上点代码吗? 具体怎么做呢?

psybor avatar May 16 '22 09:05 psybor

@bingxueyinlian 解决了吗? 我也遇到这个问题了

jiangyh1024 avatar May 31 '22 04:05 jiangyh1024

@yurizhang 请问具体是怎么做呢?

jiangyh1024 avatar May 31 '22 04:05 jiangyh1024

mark,碰到了一样的问题,也把issues里面关于内存泄漏的问题看了个遍,有小伙伴提到了在主应用引入 zone.js的方式,我用 官方demo 测试后,发现这种方式只能解决 浏览器刷新 来释放内存; image image

ruanlin-kylin avatar Aug 24 '22 08:08 ruanlin-kylin

mark,碰到了一样的问题,也把issues里面关于内存泄漏的问题看了个遍,有小伙伴提到了在主应用引入 zone.js的方式,我用 官方demo 测试后,发现这种方式只能解决 浏览器刷新 来释放内存; image image

有解决方案吗

NINGyv179 avatar Dec 15 '22 14:12 NINGyv179

参考这个https://github.com/umijs/qiankun/issues/830

dengBox avatar Apr 20 '23 06:04 dengBox