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

[RFC] loadMicroApp API 支持同名微应用缓存 #518

Open
1 of 5 tasks
kuitos opened this issue Apr 26, 2020 · 14 comments
Open
1 of 5 tasks

[RFC] loadMicroApp API 支持同名微应用缓存 #518

kuitos opened this issue Apr 26, 2020 · 14 comments
Labels
enhancement New feature or request

Comments

@kuitos
Copy link
Member

kuitos commented Apr 26, 2020

背景

目前 loadMicroApp 每次调用都会完整的将微应用的 entry 及生命周期跑一遍,即便是同名的微应用,性能上存在一定的浪费。

思路

每次 loadMicroApp 调用后将返回的生命周期钩子缓存起来,下次同名微应用通过 loadMicroApp 被加载时直接返回缓存的生命周期钩子。

但是这么做需要解决以下几个问题:

  • 两次 loadMicroApp 的调用可能 appName 相同但是 container 可以不一样,需要支持 mount 可以每次传入不同的 container。 ✨ support to pass a new container for remounting #992
  • 同一个 appName 的不同实例是否要共享沙箱?不共享沙箱的话 bootstrap 周期每个子应用都需要重新跑一遍,共享的话至少需要共享 mount 之前的上下文。通常来讲共享应该问题也不大?
  • 共享沙箱的话样式隔离怎么处理?至少需要确保每个实例动态加载的样式都应该挂载到自己的容器里。

跟进

  • some task
  • PR URL
@kuitos
Copy link
Member Author

kuitos commented Apr 26, 2020

@Deturium @howel52 看下

@kuitos kuitos added the enhancement New feature or request label Apr 26, 2020
@howel52
Copy link
Collaborator

howel52 commented Apr 26, 2020

同一个 appName 的不同实例是否要共享沙箱?

从沙箱这个概念上来说的话,我觉得不该共享

@Deturium
Copy link
Contributor

同名微应用我觉得应该视为两个不同的实例,不要复用的好
性能优化应该从 keep-alive 角度做,不要过于频繁的挂载/卸载微应用;看到好几个人做 modal 里面加载微应用这种事情了

另外共享沙箱的话我觉得【沙箱组】这个概念有没有用?多个子应用可以共享一个沙箱(但是没想到有什么应用场景),真要公用运行时沙箱,那它们为什么不做在一个应用里?

@kuitos
Copy link
Member Author

kuitos commented Apr 27, 2020

另外共享沙箱的话我觉得【沙箱组】这个概念有没有用?多个子应用可以共享一个沙箱(但是没想到有什么应用场景),真要公用运行时沙箱,那它们为什么不做在一个应用里?

不是多个子应用共享沙箱,而是可以理解成同一个子应用,挂载到了不同的节点上面。这种时候要不要共享沙箱。

@howel52
Copy link
Collaborator

howel52 commented Apr 30, 2020

不是多个子应用共享沙箱,而是可以理解成同一个子应用,挂载到了不同的节点上面。这种时候要不要共享沙箱。

它们同时存在么? 还是说同一时间只会存在一个,单纯 container 节点不同

@crper
Copy link

crper commented Apr 30, 2020

@howel52 若是只是挂载点不一样,资源一致的..缓存起来能降低性能损耗,至少浏览器不用再去解析css和js这些..

@dbkillerf6
Copy link
Contributor

dbkillerf6 commented May 15, 2020

同一个 appName 的不同实例是否要共享沙箱?

2.0.11 同名微应用貌似是共享的沙箱,但同时也引入了一个问题:

由于用的是相同的 document,<style> 样式没有挂载到它们各自的节点上,而是直接直接挂到了第一个微应用上:#574

@kuitos
Copy link
Member Author

kuitos commented Aug 7, 2020

ref #832

@eightHundreds
Copy link

有个用例记得考虑下。

loadMicroApp("A")
loadMicroApp("A")

短时间内加载同一个微应用会有问题

@yurizhang
Copy link

这个问题解决了吗,我也遇到了,加载2个同名子应用 出错。

@Pusri
Copy link

Pusri commented Jan 4, 2022

mark

@evelyn361745
Copy link

mark,遇到了同样的问题,不同的container加载同一个微应用,第二次loadMicroApp仍然使用的是第一次的实例

@cx91
Copy link

cx91 commented Jul 26, 2024

mark,遇到了同样的问题,不同的container加载同一个微应用,第二次loadMicroApp仍然使用的是第一次的实例

大哥,这个问题解决没呢?

@sillysillyc
Copy link

mark,遇到了同样的问题,不同的container加载同一个微应用,第二次loadMicroApp仍然使用的是第一次的实例

loadMicroApp 的name不要相同

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

No branches or pull requests