8月14日 打卡day19
今日学习:Qiankun原理——JS沙箱是怎么做隔离的
满满的知识点一起总结一下吧!
qiankun 有 SnapshotSandbox, LegacySandbox 和 ProxySandbox 这些沙箱
1、SnapshotSandbox快照沙箱:把主应用的 window 对象做浅拷贝,将 window 的键值对存成一个 Hash Map。之后无论微应用对 window 做任何改动,当要在恢复环境时,把这个 Hash Map 又应用到 window 上就可以了
2、LegacySandbox:通过监听对 window 的修改来直接记录 Diff 内容,只要对 window 属性进行设置,两种方法:
①新增属性:存到 addedMap 里
②更新属性:把原来的键值存到 prevMap,把新的键值存到 newMap
addedMap, prevMap 和 newMap 这三个变量能反推出微应用以及原来环境的变化
3、ProxySandbox:把当前 window 的一些原生属性拷贝出来,单独放在一个fakeWindow对象上,然后对每个微应用分配一个 fakeWindow
①当微应用修改全局变量时:
-是原生属性,则修改全局的 window
-不是原生属性,则修改 fakeWindow 里的内容
②当微应用获取全局变量时:
-是原生属性,则从 window 里拿
-不是原生属性,则优先从 fakeWindow 里获取
4、隔离原理
将函数入参 window, self, globalThis,提到的沙箱对象 window.proxy 分别传入
注意:此时,window.a 的 window 就不是全局 window 而是 fn 的入参 window
今日学习:Qiankun原理——JS沙箱是怎么做隔离的
满满的知识点一起总结一下吧!
qiankun 有 SnapshotSandbox, LegacySandbox 和 ProxySandbox 这些沙箱
1、SnapshotSandbox快照沙箱:把主应用的 window 对象做浅拷贝,将 window 的键值对存成一个 Hash Map。之后无论微应用对 window 做任何改动,当要在恢复环境时,把这个 Hash Map 又应用到 window 上就可以了
2、LegacySandbox:通过监听对 window 的修改来直接记录 Diff 内容,只要对 window 属性进行设置,两种方法:
①新增属性:存到 addedMap 里
②更新属性:把原来的键值存到 prevMap,把新的键值存到 newMap
addedMap, prevMap 和 newMap 这三个变量能反推出微应用以及原来环境的变化
3、ProxySandbox:把当前 window 的一些原生属性拷贝出来,单独放在一个fakeWindow对象上,然后对每个微应用分配一个 fakeWindow
①当微应用修改全局变量时:
-是原生属性,则修改全局的 window
-不是原生属性,则修改 fakeWindow 里的内容
②当微应用获取全局变量时:
-是原生属性,则从 window 里拿
-不是原生属性,则优先从 fakeWindow 里获取
4、隔离原理
将函数入参 window, self, globalThis,提到的沙箱对象 window.proxy 分别传入
注意:此时,window.a 的 window 就不是全局 window 而是 fn 的入参 window
展开
评论
点赞