js/css
污染是无法避免的,并且是一个可大可小的问题。就像一颗定时炸弹,不知道什么时候会出问题,排查也麻烦。作为一个基础框架,解决这两个污染非常重要,不能仅凭“规范”开发。
js
沙箱的原理是子项目加载之前,对 window
对象做一个快照,子项目卸载时恢复这个快照,如图:
那么如何监测 window
对象的变化呢,直接将 window
对象进行一下深拷贝,然后深度对比各个属性显然可行性不高,qiankun
框架采用的是ES6
新特性,proxy
代理方法。具体如何操作的,之前的文章有写(链接在文末),就不再赘述。
但是 proxy
是不兼容 IE11
的,为了兼容,低版本 IE
采用了 diff
方法:浅拷贝 window
对象,然后对比每一个属性。
作者:沉末_