single-spa
- 无关技术栈
- 最初始的微前端架构
- 没有做样式隔离
- 没有js沙箱
- 例子: single-spa.surge.sh/vue
qiankun
-
基于single-spa框架,做了再次封装
-
支持样式隔离,通过将全部样式放置在qiankun自定义头部标签元素qiankun-head中
-
支持js沙箱,主要是通过复制window对象代理模式处理,通过复制原始window对象为fakewindow后,监听子应用对window对象修改,如果是自定义变量,则直接在fakewindow上执行,如果是window上原生变量,则修改window对象,同时记录diff。
-
支持资源预加载
-
有umi插件支持一键接入
-
有html entry接入方式,方便快捷
- qiankun 用到eval,关于eval详见MDN
micro-app
这个框架是我见过微前端框架中最容易接入,框架通过webcomponents的天然优势,来完成对应用内部样式和脚本隔离,如下图所示:
- 具备js沙箱,通过proxy监听对window对象的更改,并记录diff
- 全局样式通过给每个应用增加 name属性来避免冲突
- 自带基座和子应用通信
- 接入一行代码解决
无界
- dom节点运行在webcomponent中,可以良好做到样式隔离
- js沙箱则是通过iframe来进行隔离,借助iframe的天然完全隔离优势,实现完全隔离。
- 拥有更加细腻的生命周期
- 拥有降级方案,在不支持webcomponent的情况下,实现通过iframe来加载dom。
这几点是其他框架所没有的。
综上所述,从single-spa到无界,微前端方案逐步完善。从解决方案来讲,我们从两个维度来看待,微前端一个需要解决的是css冲突,这部分的功能,几个框架大同小异;从js沙箱来说,目前比较完美的解决方案是通过iframe来做完全隔离,从这两个角度来说,无界目前是做的比较好的,在框架都比较完善前提下,单纯的从解决方案技术角度来说,无界是一个比较好的选择。