微前端对比

313 阅读2分钟

single-spa

  • 无关技术栈
  • 最初始的微前端架构
  • 没有做样式隔离
  • 没有js沙箱
  • 例子: single-spa.surge.sh/vue

qiankun

  • 基于single-spa框架,做了再次封装

  • 支持样式隔离,通过将全部样式放置在qiankun自定义头部标签元素qiankun-head中 image.png

  • 支持js沙箱,主要是通过复制window对象代理模式处理,通过复制原始window对象为fakewindow后,监听子应用对window对象修改,如果是自定义变量,则直接在fakewindow上执行,如果是window上原生变量,则修改window对象,同时记录diff。

  • 支持资源预加载

  • 有umi插件支持一键接入

  • 有html entry接入方式,方便快捷

image.png

  • qiankun 用到eval,关于eval详见MDN

micro-app

这个框架是我见过微前端框架中最容易接入,框架通过webcomponents的天然优势,来完成对应用内部样式和脚本隔离,如下图所示:

image.png

  • 具备js沙箱,通过proxy监听对window对象的更改,并记录diff
  • 全局样式通过给每个应用增加 name属性来避免冲突

image.png

  • 自带基座和子应用通信
  • 接入一行代码解决

image.png

无界

  • dom节点运行在webcomponent中,可以良好做到样式隔离
  • js沙箱则是通过iframe来进行隔离,借助iframe的天然完全隔离优势,实现完全隔离。
  • 拥有更加细腻的生命周期

image.png

  • 拥有降级方案,在不支持webcomponent的情况下,实现通过iframe来加载dom。

image.png 这几点是其他框架所没有的。

综上所述,从single-spa到无界,微前端方案逐步完善。从解决方案来讲,我们从两个维度来看待,微前端一个需要解决的是css冲突,这部分的功能,几个框架大同小异;从js沙箱来说,目前比较完美的解决方案是通过iframe来做完全隔离,从这两个角度来说,无界目前是做的比较好的,在框架都比较完善前提下,单纯的从解决方案技术角度来说,无界是一个比较好的选择。