2023前端面试八股文(汇总自用)-- 微前端

539 阅读3分钟

什么是微前端

参考文章【微前端-最容易看懂的微前端知识 - 知乎 (zhihu.com)

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

为什么会出现微前端

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

  1. 拆分和细化:当下前端领域,单页面应用(SPA)是非常流行的项目形态之一,而随着时间的推移以及应用功能的丰富,单页应用变得不再单一而是越来越庞大也越来越难以维护,往往是改一处而动全身,由此带来的发版成本也越来越高。微前端的意义就是将这些庞大应用进行拆分,并随之解耦,每个部分可以单独进行维护和部署,提升效率。
  2. 整合历史系统:在不少的业务中,或多或少会存在一些历史项目,这些项目大多以采用老框架类似(Backbone.js,Angular.js 1)的B端管理系统为主,介于日常运营,这些系统需要结合到新框架中来使用还不能抛弃,对此我们也没有理由浪费时间和精力重写旧的逻辑。而微前端可以将这些系统进行整合,在基本不修改来逻辑的同时来同时兼容新老两套系统并行运行。

微前端的优缺点

微前端的好处

  • 复杂度可控
  • 独立部署:相互之间不存在依赖关系
  • 技术选型灵活
  • 高容错:某个应用的崩溃不影响其他应用
  • 可拓展

微前端的缺陷

  • 操作复杂性:应用的拆分基础依赖于基础设施的构建,一旦大量应用依赖于同一基础设施,那么维护变成了一个挑战
  • 项目过于庞大,代码编译慢,开发体差,需要一种更高维度的解耦方案
  • 构建速度慢
  • 应用迭代麻烦

微前端因其分而治之的思想,所以中小型的项目使用微前端反而会将事情复杂化,因此更加适用于大型的独自为战的项目使用。

微前端的主流实现方案

常见的微前端方案有MicroApp, single-spa, qiankun, 以及webpack5的模块联邦 无框架的解决方案有: web components web component 本质是封装自定义的 html,会很快回到jQuery 时代。

主流方案的对比

参考文章 微前端技术方案调研(qiankun、micro-app、wujie) - 知乎 (zhihu.com) 微前端wujie、qiankun、micro-app、EMP 方案比较 - 简书 (jianshu.com)

对比single-spa类WebComponentWebComponent + iframe
框架qiankunmicro-appwujie-micro
首个版本v1.1.4 (2019-08-01)v0.1.0 (2021-07-09)1.0.0-rc.1 (2022-07-05)
最近更新v2.10.8 (2023-05-17)v1.0.0-beta.4 (2023-04-27)1.0.16 (2023-05-17)
ieYes==No==Yes,自动切换成iframe
接入成本较低
开箱即用==No====No==Yes
数据通信机制propsaddDataListenerprops、window、eventBus
js沙箱YesYesYes,iframe来实现js沙箱
样式隔离YesYesYes,webcomponent来实现页面的样式元素隔离
元素隔离==No==YesYes
静态资源地址补全==No==Yes==No==
预加载YesYesYes
keep-alive==No==YesYes
应用共享同一个资源YesYesYes
应用嵌套YesYesYes
插件系统==No==YesYes
子应用不改造接入==No==YesYes,满足跨域可以不改
内置降级兼容处理==No====No==Yes,通过 babel 来添加 polyfill
选型建议
  1. 考虑系统需要兼容 ie 浏览器场景
    wujie-micro > qiankun

  2. 接入便捷度考虑
    wujie-micro > micro-app > qiankun

  3. 框架稳定性 (框架成熟度)
    qiankun > micro-app > wujie-micro