qiankun用到的沙箱方案小记

1.对rawWindow操作的沙箱方案

该方案可在沙箱active期间操作window,但是在deactive阶段必须提供机制确保window还原,期间产生的diff会被记录下来供下一次active使用。关于还原,有两种方案,一种是使用快照,一种是记录update(需要用到proxy)。

1.1 快照沙箱

最简单的一种沙箱。在active时将window打一个windwSnapshot,deactive时用该snapshot还原window。
qiankun用到的沙箱方案小记_第1张图片

1.2 legacy沙箱(proxy)

和快照沙箱的区别在于,将window的原始状态保留在update中(代码中指的是addedPropsMapInSandbox和modifiedPropsOriginalValueMapInSandbox),deactive时根据update来进行window还原。

2.对fakeWindow操作的沙箱方案

以上方案在沙箱active期间还是会污染window,不适用多例应用场景。以下介绍多例沙箱。

2.1 多例

如图所示,创建fakeWindow,仅对fakeWindow进行写操作,读操作优先级fakeWindow > rawWindow。
qiankun用到的沙箱方案小记_第2张图片

你可能感兴趣的:(前端)