当前位置: 首页 > news >正文

浅谈什么是微前端

1. 微前端产生的背景

想象一个发展了多年的电商平台前端项目(我们称之为“巨石应用”):

  • 技术栈陈旧: 项目启动时用的是 AngularJS,但现在团队想用 React 或 Vue 开发新功能。

  • 代码库庞大: 几十个开发人员在同一个代码库里工作,git 冲突频发,构建时间漫长。

  • 团队协作低效: 前端、后端、测试团队被一个庞大的应用捆绑在一起,任何小的改动都需要整个团队协调上线,敏捷性差。

  • 升级和维护困难: 想升级一个底层依赖(如 Webpack 版本),可能牵一发而动全身,风险极高。

微前端就是为了解决这些痛点而生的。

2.微前端概念

可以把微前端理解为 在前端领域的“微服务”思想。它的核心目标是:将一个大型、复杂的前端单体应用,拆分成多个小型、简单、可以独立开发、独立运行、独立部署的应用(或模块),最后再组合成一个完整的应用。

微前端的一般结构如下:

    3.微前端的核心思想与核心价值

    核心思想: 分而治之。将一个大应用按照业务领域功能模块进行垂直拆分,每个部分都是一个独立的“微前端应用”。

    核心价值:

    1. 技术栈无关: 这是最大的优势之一。团队可以根据业务需求和技术背景,为不同的微前端应用选择合适的技术栈(React, Vue, Angular, Svelte, 甚至原生 JS)。主应用(称为“壳”或“基座”)不关心子应用内部用什么技术。

    2. 独立开发、独立部署: 各个团队可以独立并行开发自己的微前端应用,并可以独立部署上线,无需整个大应用一起发布。这极大地提升了开发效率和发布敏捷性。

    3. 增量升级: 可以平滑地重构和升级现有系统。你可以用新技术栈重写某个老旧模块,然后将其作为一个新的微前端应用逐步替换掉旧的部分,而不是一次性重写整个系统。

    4. 应用自治: 每个微前端团队可以拥有自己的开发、测试、部署流程,更具自主性。

    4.微前端的常见实现方式

    实现微前端有多种技术方案,以下是几种主流的:

    1. 路由分发式(最常用)

      • 原理: 主应用(基座)是一个空壳,主要负责路由管理、用户登录等全局事务。根据不同的 URL 路径,通过反向代理(如 Nginx)或前端路由,将请求分发到不同的、独立构建部署的子应用上。

      • 比喻: 主应用就像一个“导航App”,你点击“点外卖”,就跳转到“美团App”;你点击“打车”,就跳转到“滴滴App”。这些App都是独立的。

      • 特点: 实现相对简单,子应用之间完全隔离。但切换应用时通常是页面级刷新,体验上像是多个独立App的集合。

    2. iframe 嵌套

      • 原理: 使用传统的 <iframe> 标签来嵌入子应用。

      • 优点: 技术实现简单,提供了完美的 JavaScript 和 CSS 沙箱隔离。

      • 缺点: 用户体验差(路由状态丢失、前进后退问题、全局上下文隔离导致登录态共享困难)、SEO 不友好、通信复杂。通常被认为是“不得已”的选择。

    3. Web Components 式

      • 原理: 将每个微前端应用封装成一个真正的 Web Component(自定义 HTML 元素),例如 <micro-app-header></micro-app-header>

      • 优点: 是浏览器原生支持的方案,隔离性最好,技术栈无关性最彻底。

      • 缺点: 生态和工具链相对不成熟,CSS 样式隔离和共享仍存在挑战。

    4. 微件化(基于 Single-SPA)

      • 原理: 有一个主应用容器,它不直接加载子应用的代码,而是先加载子应用暴露出的“生命周期”函数(如 bootstrapmountunmount)。容器根据路由或用户操作,动态地调用这些生命周期来加载、渲染和卸载子应用。

      • 特点: 这是目前最流行的“单页应用”式微前端方案,能做到无刷新切换,用户体验好。qiankun 框架就是基于 Single-SPA 的封装。

    5. 基于构建时(模块联邦 - Module Federation)

      • 原理: 这是 Webpack 5 提供的新特性。它允许在构建时将一个应用的代码(组件、模块)暴露给其他应用,同时也能在运行时动态消费其他应用暴露的代码。

      • 特点: 这是一种更紧密的集成方式,可以实现应用间的深度组件共享,更像是“微模块”。它模糊了应用边界,非常灵活,但对工具链(必须使用 Webpack 5)有强依赖。

    5.微前端面临的挑战

    微前端不是银弹,它引入了新的复杂性:

    • 公共依赖管理: 多个应用可能都使用了 React、Vue 等相同的库,如何避免重复加载,如何共享单实例?

    • 应用间通信: 虽然要尽量降低耦合,但免不了需要通信(如用户信息、购物车状态)。如何设计一个清晰、可控的通信机制?

    • 样式隔离与冲突: 如何确保不同团队的 CSS 样式不会相互污染?

    • 性能监控: 整体应用的性能如何监控?错误如何定位到具体的子应用?

    • 开发环境: 如何让开发者在本地同时运行和调试主应用和多个子应用?

    五、 总结

    微前端是一种架构模式,而非具体的技术。 它的本质是将后端微服务的理念扩展到前端,旨在解决大型前端项目的可维护性、可扩展性和多团队并行开发的问题。

    特性单体前端微前端
    技术栈统一,单一可异构,自由选择
    团队协作耦合度高,需协调独立自治,并行开发
    部署整体部署,风险高独立部署,风险低
    复杂度集中在代码库和构建转移到架构和通信
    适用场景中小型项目,团队小大型企业级应用,多团队协作
    http://www.dtcms.com/a/541460.html

    相关文章:

  • AtCoder Beginner Contest 429(ABCDEF)
  • 好用的GEO优化引擎服务商
  • 做网站那个平台网站制作网站建设案例
  • 搜索引擎主题网站模板网络架构有哪几层
  • Linux 驱动开发中,主设备号和次设备号不同的两个驱动能否正常工作
  • 人和AI的分工模式!
  • 模板网站与 定制网站的 对比中企动力主要做什么的
  • ECharts 3D柱状图组件开发实战:Bar3D.vue 完整解析
  • 手机App上的轮播图是如何实现的—探究安卓轮播图
  • Day71 MQTT数据上传与ARM端交叉编译部署全链路实践
  • 2024年 5月 每日分享
  • 漯河英文网站建设创建私人网站
  • 网站开发学哪一个好电子商务网站建设模板
  • 5.4 大数据方法论与实践指南-存储-安全合规
  • 凡科建设网站图片怎么删除专门做自由行的网站
  • 车辆智能检索与缉查布控
  • Cesium中如何修改geojson数据的颜色
  • 51c大模型~合集42
  • C++语法—类的声明和定义
  • 企业网站建设方案资讯查询公司的网站
  • 高端企业网站建设公司免费网站代理访问
  • JavaEE初阶——多线程(4)线程安全
  • 杭州网站推广营销服务深圳做美颜相机的公司
  • 什么样 个人网站 备案适合做网站的软件有哪些
  • 做设计在哪个网站上找高清图青岛做物流网站
  • 数据源切换的陷阱:Spring Boot中@Transactional与@DS注解的冲突博弈与破局之道
  • Kubernetes节点资源优化:自托管代理配置实践
  • 1688网站怎样做推广东莞市路桥收费所
  • 做网站需要用到哪些开发软件潜江资讯网信息发布
  • Day2实战-元组的基本操作