qiankun
qiankun copied to clipboard
退出所有子应用时,如何彻底卸载子应用以释放内存,再次进入时让它重新走bootstrap而不是mount
子应用退出时调用了unmount,但是内存没释放
因为子应用体积比较大,子应用用完以后回到主应用,希望彻底卸载子应用以释放内存。这样再进入别的子应用时不至于内存占用过大。
复现步骤
1.登录进入主应用,浏览器内存占用为:165M 2.进入子应用A(通过loadMicroApp手动加载子应用),浏览器内存占用为:235M 3.退出子应用A,回到主应用(手动调用子应用的unmount),浏览器内存占用为:246M(没有降,反而升了) 4.再次进入子应用A(没走bootstrap,只执行了mount),浏览器内存占用为:364M(继续升)
- 内存值均为稳定后,任务管理器的显示值
相关环境信息
- qiankun 版本 2.4.3
- 浏览器版本: Chrome 92 64位
- 操作系统: win10 企业版本
single-spa的接口里有一个singleSpa.unloadApplication('app1');
方法,但是参数为appname,这个appname只有调用了registerMicroApps才可以用,但是手动调用loadMicroApp加载的微应用,不能和registerMicroApps一起使用。所以还得请教,这种情况应该如何unload微应用?
你可以考虑动态加载子组件~~ 我这样是可以的。
考虑动态加载子组件~~
具体怎么做,方便上点代码不?
同求,通过loadMicroApp手动加载子应用后,即使调用子应用的unmount,内存依然没有释放,滚雪球一样
同求,通过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.
你可以考虑动态加载子组件~~ 我这样是可以的。
可以上点代码吗?
你可以考虑动态加载子组件~~ 我这样是可以的。
可以上点代码吗?
请问怎么动态加载子组件
同求,内存一直没释放
同求
请问此问题是否有已有解决方案?
你可以考虑动态加载子组件~~ 我这样是可以的。
能上点代码吗? 具体怎么做呢?
@bingxueyinlian 解决了吗? 我也遇到这个问题了
@yurizhang 请问具体是怎么做呢?
mark,碰到了一样的问题,也把issues里面关于内存泄漏的问题看了个遍,有小伙伴提到了在主应用引入 zone.js的方式,我用 官方demo 测试后,发现这种方式只能解决 浏览器刷新 来释放内存;
mark,碰到了一样的问题,也把issues里面关于内存泄漏的问题看了个遍,有小伙伴提到了在主应用引入 zone.js的方式,我用 官方demo 测试后,发现这种方式只能解决 浏览器刷新 来释放内存;
![]()
有解决方案吗
参考这个https://github.com/umijs/qiankun/issues/830