Skip to content
On this page

介绍

qiankun 是一个基于 single-spa微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。

什么是微前端

微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。

微前端架构旨在解决单体应用在一个相对长的时间跨度下,由于参与的人员、团队的增多、变迁,从一个普通应用演变成一个巨石应用后,随之而来的应用不可维护的问题。

微前端架构的核心思想是:一个应用由多个前端应用组成。每个前端应用都是一个独立的小团队通过独立的开发、测试、部署来进行独立的业务开发。在用户访问过程中,根据用户的访问路径,将不同的前端应用组合成一个完整的应用。

为什么要使用微前端

微前端架构的核心目标是将巨石应用拆分成多个可以自治的小应用,从而达到以下目标:

  • 技术栈无关:主框架不限制接入应用的技术栈,微应用具备完全自主权

  • 独立开发、独立部署:微应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新

  • 增量升级:在面对各种复杂场景时,我们通常很难对一个已经存在的系统做全量的技术栈升级或重构,而微前端是一种非常好的实施渐进式重构的手段和策略

  • 独立运行时:每个微应用之间状态隔离,运行时状态不共享

微前端应用场景

  • 多个团队:多个团队独立开发

  • 多个项目:多个项目整合

  • 独立开发:独立开发、独立部署

  • 增量升级:渐进式重构

  • 独立运行时:每个微应用之间状态隔离,运行时状态不共享

微前端的缺点

  • 性能问题:每个微应用都有自己的依赖库和框架,这可能导致大量重复的代码和更大的应用大小。此外,多个运行时可能会导致内存和CPU资源的浪费。

  • 增加了复杂性:微前端架构需要一个微服务的基础设施来支持它。你需要实现路由、状态管理、通信机制等微前端所需的功能,这都会增加应用的复杂性。

  • 团队间的沟通成本增加:每个微应用由不同的团队开发和维护,这可能导致沟通和协作的困难。尤其是在跨应用的特性开发和bug修复时,需要很好的团队间的协调和沟通。

  • 技术栈不一致问题 :不同的微应用可能使用不同的技术栈,这可能导致应用的一致性问题。虽然微前端架构允许使用不同的技术栈,但对于用户来说,应用间的切换应该是无缝的。

  • 安全性问题:在微前端架构中,每个微应用都是独立的,因此需要单独处理安全问题,比如防止跨站脚本攻击(XSS)等。

  • 测试的复杂性增加:由于每个微应用都是独立的,因此每个应用都需要进行单独的测试。同时,你还需要进行集成测试来确保所有应用能够正常协同工作。

常见微前端的实现方式

  • iframe 沙箱:这种方式最为简单。每个微应用都在各自的 iframe 中独立运行。这种方法的优点是隔离性好,微应用之间不会互相影响。但缺点也明显,包括 iframe 的性能问题、微应用之间的通信复杂以及无法共享上下文和组件等。为什么不使用iframe,具体可以查看这里

  • Web Components:Web Components 是一种浏览器原生支持的技术,它允许创建可重用的自定义元素,并在其内部封装它们的功能。每个微应用都可以作为一个 web component,从而实现隔离。然而,这种方式的问题在于 web components 的浏览器兼容性。

  • JavaScript 框架: 这种方式依赖于 JavaScript 框架,比如 Single-SPA、qiankun 等。这些框架提供了微前端的解决方案,可以帮助我们进行微应用的加载、卸载、切换等,同时也提供了一些通信机制。但是这种方式需要引入额外的库和框架,可能会增加项目的复杂性。

qiankun 的特性

  • 技术栈无关:主框架不限制接入应用的技术栈,微应用具备完全自主权

  • HTML Entry 接入方式:微应用接入方只需要提供一个入口 html,即可接入微前端系统的任意位置

  • 样式隔离:确保微应用之间样式互相不干扰

  • JS 沙箱:确保微应用之间 全局变量/事件 不冲突

  • HTML 沙箱:确保微应用之间 DOM 结构不冲突

  • prefetch 预加载:在浏览器空闲时间预加载未打开的微应用资源,加速微应用打开速度