Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
bingxueyinlian opened this issue Sep 14, 2021 · 16 comments

Comments

@bingxueyinlian
Copy link

bingxueyinlian commented Sep 14, 2021

子应用退出时调用了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
Copy link
Author

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

@yurizhang
Copy link

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

@bingxueyinlian
Copy link
Author

考虑动态加载子组件~~

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

@zwj9297
Copy link

zwj9297 commented Nov 1, 2021

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

@ViavaCos
Copy link

ViavaCos commented Dec 9, 2021

同求,通过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.

@Pusri
Copy link

Pusri commented Jan 4, 2022

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

可以上点代码吗?

@Z-Champion
Copy link

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

可以上点代码吗?

请问怎么动态加载子组件

@BerthaPeng
Copy link

同求,内存一直没释放

@xjown
Copy link

xjown commented Apr 16, 2022

同求

@WuBin88996
Copy link

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

@psybor
Copy link

psybor commented May 16, 2022

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

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

@jiangyh1024
Copy link

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

@jiangyh1024
Copy link

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

@ruanlin-kylin
Copy link

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

@NINGyv179
Copy link

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

有解决方案吗

@dengBox
Copy link

dengBox commented Apr 20, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests