Skip to content

微前端架构

出于技术选型, 了解微前端架构的好处,了解微前端的实现方式,了解微前端的拆分方式。

  • 什么是微前端?
  • 架构发展历程
  • 为什么选择微前端?

我的微前端架构选择 ?

1. 什么是微前端?

微前端的核心思想是将一个复杂的应用拆分成多个独立的子应用,每个子应用都可以独立开发、测试、部署。这样可以提高开发效率,降低维护成本,同时也可以提高应用的可扩展性和可维护性。

应用 = 应用A + 应用B + 应用C

每个应用可以选择不同的技术栈,甚至是不同的框架。

微前端不是一门具体的技术,而是一种架构思想。微前端的实现方式有很多种。

微前端解决问题

  • 1、随着项目迭代应用越来越庞大,难以维护。
  • 2、跨团队或跨部门协作开发项目导致效率低下的问题。

2.架构发展历程

单体应用 -> 前后端分离 -> 微服务化 -> 微前端化。

架构项目结构
单体应用1个团队(前端、后端)
前后端分离前端团队、后端团队
微服务化前端团队、后端整合(服务1、服务2、服务3)
微前端化前端整合(服务1、服务2、服务3)、后端整合(服务1、服务2、服务3)

3. 为什么选择微前端?

微前端的优势在于:

  • 提高开发效率:每个子应用可以独立开发、测试、部署,降低了维护成本。
  • 提高可扩展性:每个子应用可以根据业务需求独立扩展,提高了应用的灵活性。
  • 提高可维护性:每个子应用可以独立维护,降低了整体应用的维护成本。

4. 微前端的拆分方式

更多根据业务需求来做,而不是技术决策

5. 微前端的实现方式有哪些?

1. Iframe 嵌入‌

  • ‌实现方式‌:通过 <iframe> 标签嵌入独立子应用,利用浏览器原生的隔离性实现独立运行。
  • ‌优点‌:
    • 天然的隔离性‌:CSS、JS 完全隔离,无全局污染。
    • ‌技术栈无关‌:子应用完全独立,无需统一技术栈。
    • ‌部署简单‌:子应用可独立部署,通过 URL 动态加载。
  • ‌缺点‌:
    • ‌通信复杂‌:需通过 postMessage 或 URL 参数跨域通信,开发成本高。
    • ‌体验割裂‌:路由、加载状态、滚动条等无法统一控制。(子模块弹窗,无法居中)
    • ‌性能问题‌:重复加载公共依赖,内存占用高。
  • 总结: 又不是不能用
主流方案: 无界
  • 无界微前端方案基于 webcomponent 容器 + iframe 沙箱, 来自腾讯团队
  • 使用成本低
  • 继承 iframe 的优点,补足 iframe 的缺点。
    • 利用 iframe 的隔离性,把 JS 代码放到 iframe 里执行(通过 Proxy)。
    • 利用 Shadow DOM的隔离性,把子应用的 DOM 写到 ShadowRoot 里,实现样式隔离

2. 主从架构, 路由分发+资源处处理

  • ‌实现方式‌:主应用作为基座,通过路由动态加载子应用(如 single-spa 或 qiankun、 Piral、 Garfish)。
  • ‌优点‌:
    • ‌灵活的技术栈‌:子应用可使用不同框架(React/Vue/Angular)。
    • ‌动态加载‌:按需加载子应用,减少首屏资源体积。
    • ‌统一入口‌:主应用控制路由、权限和公共依赖。
  • ‌缺点‌:
    • ‌依赖管理复杂‌:需统一公共库版本(如 React/Vue)。
    • ‌全局污染风险‌:子应用可能修改全局变量(如 window)。
    • ‌通信成本‌:主-子应用需通过自定义事件或状态管理工具通信。
  • 总结: 使用占比大,花样繁多
主流方案: qiankun (乾坤)
  • qiankun 是一个基于 single-spa 的微前端解决方案,来自蚂蚁金服团队。
  • 国内目前影响力最大的面向生产的微前端方案

3.Webpack Module Federation(模块联邦, 去中心化心)‌

  • ‌实现方式‌:通过 Webpack 5 的模块联邦功能,动态加载远程模块(如 @module-federation)。
  • ‌优点‌:
    • ‌高效共享依赖‌:公共库只需加载一次,子应用按需复用。
    • ‌运行时动态集成‌:无需构建时绑定,适合敏捷开发。
    • ‌技术栈自由‌:支持不同框架的模块混合使用。
  • ‌缺点‌:
    • ‌配置复杂‌:需统一 Webpack 版本和构建流程。
    • ‌版本冲突风险‌:子应用依赖版本不一致可能导致问题。
    • ‌调试困难‌:跨应用调试需额外工具支持。
主流方案:EMP
  • EMP 是由欢聚时代业务中台前端团队推出的

4.Web Components‌

  • ‌实现方式‌:子应用封装成 Web Components(自定义 HTML 标签),主应用直接引用。
  • ‌优点‌:
    • ‌原生隔离性‌:通过 Shadow DOM 实现样式和 DOM 隔离。
    • ‌标准化‌:基于浏览器原生 API,无框架绑定。
    • ‌复用性强‌:组件可跨项目复用。
  • ‌缺点‌:
    • ‌生态不完善‌:社区工具链(如状态管理、路由)较弱。
    • ‌兼容性要求‌:需 Polyfill 支持旧浏览器。
    • ‌开发成本高‌:需手动处理通信和生命周期。
Web Components 包含三项主要技术:
  • Custom elements(自定义元素) :一组 JavaScript API,允许你定义 custom elements 及其行为,然后可以在你的用户界面中按照需要使用它们。
  • Shadow DOM (影子 DOM) :一组 JavaScript API,用于将封装的“影子” DOM 树附加到元素(与主文档 DOM 分开呈现)并控制其关联的功能。通过这种方式,你可以保持元素的功能私有,这样它们就可以被脚本化和样式化,而不用担心与文档的其他部分发生冲突。
  • HTML templates(HTML 模板) : <template> 和 <slot> 元素使你可以编写不在呈现页面中显示的标记模板。然后它们可以作为自定义元素结构的基础被多次重用。

主流方案1:MicroApp

  • 京东推出的一款年轻的、基于 WebComponent 进行渲染的微前端框架

主流方案2:Magic Microservices

  • 字节开源的一款基于 Web Components 的轻量级的微前端工厂函数

5. ‌Component-driven(组件驱动开发)

  • ‌Component-driven(组件驱动开发)‌ 是一种将用户界面拆解为独立、可复用组件的开发范式,强调以组件为最小单元进行开发、测试与协作‌3。在微前端架构中,该模式进一步演化为‌跨应用组件共享机制‌,允许不同子应用通过标准化接口调用公共组件,实现模块化复用‌

  • 工作流:创建组件 - > 发布组件 -> 消费组件

  • ‌优势‌

    • ✅ 提升代码复用率(减少重复开发 30%-50%)‌3
    • ✅ 降低多团队协作复杂度(组件即标准化交付物)‌26
    • ✅ 支持渐进式升级(仅更新特定组件,无需全量发布)‌
  • ‌劣势‌

    • ❌ 组件开发成本高, 组件规范统一‌:需制定严格的接口标准与文档,避免组件滥用或兼容性问题‌
    • ❌ 性能优化‌:跨应用加载组件可能增加网络请求,需结合懒加载或预加载策略‌

主流方案: BIT

  • Bit 在本质上就是一个更易用、更强大、更贴合微前端场景的 npm

主流方案对比

名称方案官网流行程度(个人感觉)开发团队
qiankun主从架构官网⭐️⭐️⭐️⭐️⭐️蚂蚁金服
Bit‌Component-driven组件驱动官网⭐️⭐️⭐️⭐️⭐️bit 国外
无界Iframe官网⭐️⭐️⭐️⭐️腾讯
EMPWebpack Module Federation官网⭐️⭐️⭐️欢聚时代
MicroAppWeb Components官网⭐️⭐️⭐️京东
Magic MicroservicesWeb Components官网⭐️⭐️⭐️字节

总结

  • wujiemicro-app 对 vite 的支持友好, 构建改造成本低 (适合 系统渐进式迁移)
  • qiankun 文档全,社区活跃,调试、通信方便 (适合 多团队 和 多技术)
  • wujie iframe物理隔离杜绝样式/js污染(适合 高安全、高敏感场景)
  • Webpack Module Federation 共享模块,减少重复代码 (适合 模块化应用)

参考

微前端五大门派大 Battle

将微前端做到极致-无界微前端方案

2025年再看微前端框架技术选型:深度对比与趋势分析

京ICP备2024093538号-1