微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。
微前端借鉴了微服务的架构理念,将一个庞大的前端应用拆分为多个独立灵活的小型应用,每个应用都可以独立开发、独立运行、独立部署,再将这些小型应用联合为一个完整的应用。微前端既可以将多个项目融合为一,又可以减少项目之间的耦合,提升项目扩展性,相比一整块的前端仓库,微前端架构下的前端仓库倾向于更小更灵活。
一.微前端特性
技术栈无关
主框架不限制接入应用的技术栈,微应用具备完全自主权独立开发、独立部署
微应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新增量升级
在面对各种复杂场景时,我们通常很难对一个已经存在的系统做全量的技术栈升级或重构,而微前端是一种非常好的实施渐进式重构的手段和策略独立运行时
每个微应用之间状态隔离,运行时状态不共享
二.微前端方案
2.1 基于 iframe 完全隔离的方案
我们对 iframe 已经非常熟悉了,在一个应用中可以独立运行另一个应用。它具有显著的优点:
非常简单,无需任何改造
完美隔离,JS、CSS 都是独立的运行环境
不限制使用,页面上可以放多个 iframe 来组合业务
当然,缺点也非常突出:
无法保持路由状态,刷新后路由状态就丢失
完全的隔离导致与子应用的交互变得极其困难
iframe 中的弹窗无法突破其本身
整个应用全量资源加载,加载太慢
2.2 京东 micro-app 方案
micro-app 是京东零售推出的一款微前端框架,并没有沿袭 single-spa 的思路。它基于类 WebComponent 进行渲染,从组件化的思维实现微前端,旨在降低上手难度、提升工作效率。它是目前接入微前端成本最低的框架,并且提供了 JS 沙箱、样式隔离、元素隔离、预加载、资源地址补全、插件系统、数据通信等一系列完善的功能。
2.3 腾讯无界微前端
wujie 无界微前端是一款基于 Web Components + iframe 微前端框架,具备成本低、速度快、原生隔离、功能强等一系列优点。
Web Components 是一个浏览器原生支持的组件封装技术,可以有效隔离元素之间的样式,iframe 可以给子应用提供一个原生隔离的运行环境,相比自行构造的沙箱 iframe 提供了独立的 window、document、history、location,可以更好的和外部解耦。无界微前端采用 webcomponent + iframe 的沙箱模式,在实现原生隔离的前提下比较完善的解决了上述问题。
2.4 基于 single-spa 路由劫持方案
single-spa 通过劫持路由的方式来做子应用之间的切换,但接入方式需要融合自身的路由,有一定的局限性。
社区最为主流的方案是蚂蚁金服孵化出的 qiankun 微前端框架。之前有传闻微众有开源微前端框架,了解之后发现其开源的 Fes.js 只能算是个前端开发工具包,其微前端能力使用的依然是 qiankun。
网传 qiankun 暂不支持 vite 应用,从而放弃引入 qiankun 框架。再此辟谣,亲测有效的方式是借助 vite-plugin-qiankun 插件来解决,详细可见之后更新的内容。
三.应用场景
如同微服务的广泛应用,没有微服务都不敢叫互联网公司。微前端同样可在中大型项目中撒开膀子干。我们公司计划在增值项目中去推行,每项增值收费的功能都将是一个或一组独立的子服务与子应用。独立仓库,独立权限,独立开发,独立运行,独立部署,对内对外都会更加的灵活和安全。