-
Notifications
You must be signed in to change notification settings - Fork 2k
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
feat(option): loadMicroApp 增加 disableCache 配置项 #2329
base: master
Are you sure you want to change the base?
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
这个应该有一个单独的 unload 方法来做卸载比较好,不过 2.x 不计划再新增 api 了 |
unloadMicroApp 的作用包含哪些呢?卸载微应用且删除资源缓存?可能容易跟 unmount 混淆吧? |
不会混吧,single-spa也有类似的api。 这个需求本质是卸载一个应用,确保他的缓存等信息是清空的,加载一个不带cache的微应用背后实际就是先清空缓存再加载 |
这个也有道理,但如果页面中存在多个相同微应用实例,此时并不会进行卸载,那就依然存在缓存问题 或者说 disableCache 的配置和 unloadMicroApp API 并不冲突?两者支持的场景有不同的地方 |
回到原始问题:
如果是为了解决有些全局副作用不会重复执行的问题,我的思路还是先 unload 再 load,明确这是一个全新的应用加载流程,而不是说我是加载同一个微应用,只是这次不用 cache 的语义。 |
@kuitos 具体怎么清空他的缓存呢,可以先上一部分代码么,我这边也是微应用切换的时候,内存一直在增加。 |
@kuitos 那目前内存增加的问题,有临时解决方案么,可以提供下思路和代码么 |
@kingback 你这边问题解决了么 |
同样, 我也遇到此问题, 由于load了多份子应用, 导致内存居高不下, chrome内存直接干到1个G了 |
@kuitos 请问下缓存的问题有解决方式嘛 |
有个下下策,让子应用一直存在(主应用对渲染容器keep-alive 或者 挂载数据全局),不卸载,第二次进入也不再重新加载(不二次加载就不存在内存泄漏),只是运行时多耗点内存,还提升了二次进入性能。如果子应用存在leep-alive 处理好退出时状态就行。一个应用初次加载浏览器内存一般在50-70M,测试该方法运行3子应用内存最大值500M+,对比多次卸载、加载导致内存泄漏,完全可接受 |
在子应用内,使用loadMicroApp加载其他子应用,第一次加载会很慢,后续就正常,这个问题有解决方案吗? |
可以试试预加载,但无法解决首次直接通过路由访问子应用慢(优化子应用或抽取应用的公共依赖,进行复用)的问题 手动:https://qiankun.umijs.org/zh/api#prefetchappsapps-importentryopts 自动:https:qiankun.umijs.org/zh/api#startopts
|
Checklist
npm test
passesDescription of change
默认情况下,为了提升性能和避免内存泄漏的风险(见 #832),在多次加载相同微应用的时候,qiankun 不会重复加载资源和执行代码(见 #518),但这样会带来一些副作用:
虽然这些问题可以通过一些方式解决,比如将 bootstrap 的逻辑放到 mount 里,比如在 unmount 的时候重置全局变量、store,但是:
此处增加了
disableCache
的配置项,让用户可以选择关闭缓存,解决上述问题,同时在文档中也注明了可能带来性能和内存问题的风险