初识微前端架构

790 阅读4分钟

本文基于qiankun实现库来做一个知识整理以及落地实现。

什么是微前端

微前端是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将Web应用由单一应用转变为多个小型前端应用聚合为一的应用。各个前端应用还可以独立运行、独立开发、独立部署。 微前端不是单纯的前端框架或者工具,而是一套架构体系。

Techniques, strategies and recipes for building a modern web app with multiple teams that can ship features independently. 
-- Micro Frontends

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

为什么使用微前端架构

任何新技术的产生都是为了解决现有场景和需求下的技术痛点,微前端也不例外:

  • 拆分和细化

当下前端领域,单页面应用(SPA)是非常流行的项目形态之一,而随着时间的推移以及应用功能的丰富,单页应用变得不再单一而是越来越庞大也越来越难以维护,往往是改一处而动全身,由此带来的发版成本也越来越高。微前端的意义就是将这些庞大应用进行拆分,并随之解耦,每个部分可以单独进行维护和部署,提升效率。

  • 整合历史系统

在不少的业务中,或多或少会存在一些历史项目,这些项目大多以采用老框架的B端管理系统为主,介于日常运营,这些系统需要结合到新框架中来使用还不能抛弃,对此我们也没有理由浪费时间和精力重写旧的逻辑。而微前端可以将这些系统进行整合,在基本不修改来逻辑的同时来同时兼容新老两套系统并行运行。

微前端架构的核心价值

  • 技术栈无关

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

  • 独立开发、独立部署

微应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新,可以接入自动化部署等开发流程。

  • 增量升级

在面对各种复杂场景时,利用微前端架构对项目进行增量升级,而不是对一个已经存在的项目进行全量的技术栈升级或者重构。

  • 独立运行

每一个微应用在运行过程中,状态隔离,不共享,但是可以使用通讯方式进行数据交换。

为什么选择微前端而不是iframe

如果不考虑体验问题,那么iframe将是一个几乎完美的微前端解决方案。

iframe提供了浏览器原生的硬隔离方案,不论是样式隔离、js隔离这类问题都能被完美的解决,但是它最大的问题也在于他的隔离性无法被突破,导致应用间上下文无法被共享。随之带来的是开发体验与产品体验的问题。

  • url不同步,浏览器刷新iframe url状态丢失、后退前进按钮无法使用。
  • UI不同步,DOM结构不共享。

举个例子,我们在微应用中使用了antd组件库中的Model组件,如果使用iframe嵌入屏幕右下角1/4处,那么在完整项目使用时,你会发现弹窗并没有在页面的中间,而是在iframe嵌入的中间,这将会非常影响页面效果。

  • 全局上下文完全隔离,内存变了不共享。iframe内外系统的通信。数据同步等需求

  • 加载时间长。 每次子应用进入都是一次浏览器上下文的重建、资源重新加载的过程。

综上,iframe只能算是一个解决方案,但是如果有更好的微前端框架那为啥不用呢。