初探微前端

2023-09-20 17:00:33

🚀🚀🚀
  随着互联网技术的不断发展,前端应用规模和复杂性也在不断增加。传统的单体前端应用面临着很多挑战,比如应用难以扩展、团队协作困难、技术栈选择不灵活等。为了应对这些挑战,微前端架构应运而生。本文将详细介绍微前端的背景、概念、实现方式以及现有的解决方案。

一、微前端的背景和概述

在这里插入图片描述

  随着互联网应用的不断发展,前端应用变得越来越复杂,功能模块和团队规模也在不断增加。在传统的单体前端架构中,所有功能模块都被打包在同一个前端应用中,这导致了应用的扩展性和可维护性变得非常困难。为了解决这些问题,微前端架构应运而生。

1.1 概念


  微前端 提供了一种技术:可以将多个独立的Web应用聚合到一起,提供统一的访问入口。一个微前端应用给用户的感观就是一个完整的应用,但是在技术角度上是由一个个独立的应用组合通过某种方式组合而成的。

  微前端的思路就是把微服务的架构引入到前端,其核心都是要能够以业务为单元构建端到端的垂直架构,使得单个的团体能够独立自主的进行相关的开发,同时又具有相当的灵活性,按需求组成交付应用。

1.2 特点


  1. 技术栈无关:主框架不限制接入应用的技术栈,子应用具备完全自主权。
  2. 独立性强:独立开发、独立部署,子应用仓库独立。
  3. 状态隔离:运行时每个子应用之间状态隔离。

1.3 背景


  “微前端”一词最早于2016年底在ThoughtWorks 技术雷达中提出的。它将微服务的概念扩展到了前端世界。当前的趋势是构建一个功能强大且功能强大的浏览器应用程序(也称为单页应用程序),该应用程序位于微服务架构之上。随着时间的流逝,通常由一个单独的团队开发的前端层会不断增长,并且变得更加难以维护。

  微前端背后的想法是将网站或Web应用程序视为由独立团队拥有的功能的组合。每个团队都有自己关心和专长的不同业务或任务领域。一个团队是跨职能的,并且从数据库到用户界面,端到端地开发其功能。

  但是,这个想法并不新鲜。它与“单体系统”概念有很多共同点。在过去,类似的方法被称为“垂直系统的前端集成”。但是微前端显然是一个更友好,更轻巧的术语。

  在微服务的架构中,后台的服务已经按照业务进行了分离,而前端仍然是一个单体构建,通过网关来调用不同的后台服务。这个微服务的思路是相违背的,这也就造成了你的后端团队是按照业务分割的,但是前端团队仍然是一个整体。微前端可以有效地改进这一点。

  微前端的核心思路其实是远程应用程序,包含组件/模块/包的运行时加载。

二、微前端的实现方式

2.1 服务端集成


  微前端的第一种实现思路是服务端集成,即通过 Nginx 配置反向代理来实现不同路径映射到不同应用,这样可以实现项目的独立开发和部署。

在这里插入图片描述

  但同时这种做法也会丢失 SPA 的体验,每一次命中路由都会重新请求资源,不能局部更新当前页面。

SPA(Single-Page Application): 它指的是单页面应用程序。这种应用程序运行在浏览器中,能够动态地更新用户界面,而无需重新加载整个页面。通常,SPA主要依赖于JavaScript来控制页面的渲染和数据的交互,其核心是前端框架或库,如AngularReactVue

2.2 运行时集成


  另一种方法就是运行时集成,这种方法一种实现就是使用iframe,通过配置不同的src加载不同的子应用页面。

<iframe src="https://test.qq.com/a/index.html"></iframe>

iframe优点

  • iframe自带的样式、环境隔离机制使得它具备天然的沙盒机制
  • 嵌入子应用比较简单。

iframe缺点

  • iframe 功能之间的跳转是无效的,刷新页面无法保存状态
  • URL的记录完全无效,刷新会返回首页。
  • 主应用劫持快捷键操作,事件冒泡不穿透到主文档树上。
  • 模态弹窗的背景是无法覆盖到整个应用。
  • iframe 应用加载失败,内容发生错误主应用无法感知,通知麻烦

综上,iframe也可以实现微前端,但是需要解决其自身的诸多弊端。

三、现有的解决方案

  目前,已经有一些成熟的微前端解决方案可供选择,下面介绍其中几种常用的解决方案。

3.1 single-spa


在这里插入图片描述

  single-spa 是一个用于构建前端微服务架构的 JavaScript 框架。它可以让你在同一个页面上同时运行多个独立的 JavaScript 应用,这些应用可以由不同的团队开发和维护,并且可以使用不同的技术栈。

  single-spa 的核心思想是将前端应用拆分成小的功能模块,每个模块独立运行并与其他模块进行通信。每个模块可以是一个单页应用、一个 React 组件、一个 Angular 模块等。single-spa提供了一套 API 和生命周期钩子,用于管理这些模块的加载、卸载和通信。

single-spa 具有以下特点

  1. 技术无关性:可以使用任意技术栈开发模块,比如 ReactAngularVue等。
  2. 应用自治:每个模块独立运行,有自己的路由和状态管理,不会受到其他模块的影响。
  3. 动态加载:每个模块可以在需要时动态加载,提高应用的性能和加载速度。
  4. 增量迁移:可以将现有的单页应用逐步迁移到微服务架构,而不需要重写整个应用。

3.2 qiankun


在这里插入图片描述

  qiankun 是一个基于浏览器端的微前端解决方案,它由蚂蚁金服开发并开源。它旨在帮助开发者将复杂的前端应用拆分成多个子应用,每个子应用可以独立开发、独立运行、独立部署,同时可以通过 qiankun 进行整体的集成和协同工作。

  qiankun 的核心思想是将前端应用拆分成多个微前端子应用,然后通过 qiankun 进行整合。每个子应用可以使用不同的技术栈和框架,并且可以独立开发和部署。qiankun 提供了一套统一的通信机制和应用间路由管理,使得不同的子应用可以相互通信和跳转。

  使用 qiankun 可以带来很多好处。首先,它可以提高前端团队的开发效率,不同的子应用可以并行开发,互不干扰。其次,qiankun 支持独立部署和动态加载,可以实现按需加载和懒加载,减小首屏加载时间。此外,qiankun 还提供了一些监控和调试工具,方便开发者进行性能优化和故障排查。

3.3 micro-app

在这里插入图片描述


  micro-app 是一个基于 Web Component 技术的微前端框架,它可以将不同的前端应用封装成独立的 Web Component,然后通过自定义元素的方式进行集成。

   micro-app 支持各种前端框架,如 ReactAngularVue 等,使得开发者可以选择最适合自己的技术栈。同时,micro-app 还提供了一些可视化工具和插件,方便开发者进行调试和监控。micro-app 通常具有以下特点:

  1. 独立性micro-app 可以独立运行,不依赖于其他应用程序或者系统环境。它可以作为一个独立的应用程序安装和卸载,并且有自己的界面和用户交互。
  2. 轻量级micro-app 通常具有较小的体积和内存占用,可以快速启动和执行。这使得它们适合在资源受限的设备上运行,如手机、智能手表等。
  3. 模块化micro-app 通常以模块化的方式组织代码和功能。每个模块只包含特定的功能和服务,可以独立开发、测试和部署。这种模块化的设计使得开发、维护和扩展变得更加容易。
  4. 可扩展性micro-app可以通过插件或者扩展机制进行扩展。开发者可以根据需要添加额外的功能模块或者服务,并且这些扩展可以在运行时动态加载和卸载。
  5. 跨平台micro-app 可以跨平台运行,适配不同的操作系统和设备。它们可以使用特定的开发框架或者技术栈,如 React NativeFlutter等,来实现跨平台的支持。

四、总结


🚀 🚀
  微前端框架是解决大型前端应用复杂性和可扩展性的重要手段之一。通过将前端应用拆分成独立的功能模块,每个模块都可以独立开发、部署和运行,可以提高开发效率、降低团队间的沟通成本,并且使得应用更加稳定和可扩展。目前,已经有一些成熟的微前端解决方案可供选择, 如 single-spaqiankunmicro-app 等,开发者可以根据自己的需求选择最合适的解决方案进行开发。

更多推荐

面试题:HTTPS 是如何保证传输安全的?又被问了!

文章目录1.HTTP协议1.1HTTP协议介绍1.2HTTP中间人攻击1.3防止中间人攻击2.HTTPS协议2.1HTTPS简介2.2CA认证体系总结1.HTTP协议在谈论HTTPS协议之前,先来回顾一下HTTP协议的概念。1.1HTTP协议介绍HTTP协议是一种基于文本的传输协议,它位于OSI网络模型中的应用层。HT

【Nginx26】Nginx学习:日志与镜像流量复制

Nginx学习:日志与镜像流量复制总算到了日志模块,其实这个模块的指令之前我们就用过了,而且也是是非常常见的指令。相信这一块的学习大家应该不会有什么难度。另一个则是镜像功能,这个估计用过的同学就比较少了,不过也并不是特别的复杂,一会讲到的时候咱们再详细说哦。今天的两个模块都是包含在Nginx源码中的,不需要额外单独编译

MySQL-DML语句

DML语句Create单行插入数据多行插入数据插入否则更新replaceinto查看受影响行数的函数Retrieve全列查询指定列查询select+函数/表达式对查询出的列重命名-asdistinctorderbylimitwhere子句比较运算符逻辑运算符UpdateDeletedeletetruncatedelet

Linux: Cache 简介

文章目录1.前言2.背景3.Cache硬件基础3.1什么是Cache?3.2Cache工作原理3.3Cache层级架构3.4内存架构中各级访问速度概览3.5Cache分类3.6Cache的查找和组织方式3.6.1Cache组织相关术语3.6.2Cache查找3.6.2.1Cache查找过程概述3.6.2.2Cache查

cgroup限制内存

首先简单介绍下cgroup限制cpu的使用率,写一段代码如下:#include<stdio.h>#include<pthread.h>intmain(){inti=0;for(;;)i++;return0;}很明显,这里面是单核拉满,然后top看下进程的cpu使用率,如下所示:很明显,截图中的cpu使用率是正常的,现在

一,安卓aosp源码编译环境搭建

系列文章目录第一章安卓aosp源码编译环境搭建第二章手机硬件参数介绍和校验算法第三章修改安卓aosp代码更改硬件参数第四章编译定制rom并刷机实现硬改(一)第五章编译定制rom并刷机实现硬改(二)第六章不root不magisk不xposedlsposedfrida原生修改定位第七章安卓手机环境检测软件分享第八章硬改之设

mybatis学习记录(二)-----CRUD--增删改查

目录使用MyBatis完成CRUDz--增删改查3.1insert(Create)3.2delete(Delete)3.3update(Update)3.4select(Retrieve)查询一条数据查询多条数据使用MyBatis完成CRUDz--增删改查准备工作创建module(Maven的普通Java模块):myb

算法通关村-----动态规划高频问题

最少硬币数问题问题描述给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。详见leetcode322问题分析设f(n)为amount=n时使用的最少金币数。遍

【JavaSE笔记】数组

一、前言数组被广泛应用于各种应用场景中。在这篇文章中,我们将深入探讨Java数组的概念、定义、基本操作、多维数组以及常见的应用场景。二、数组的基本概念1、什么是数组数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。比如现实中的车库:在java中,包含6个整形类型元素的数组,就相当于上图中连在一起的6个车

【腾讯云 Cloud Studio 实战训练营】基于Python实现的快速抽奖系统

文章目录⭐️CloudStudio-简介🌟操作步骤🌟注册CloudStudio🌟创建工作空间🌟启动对应的开发环境⭐️抽奖系统项目介绍⭐️抽奖系统代码结构图⭐️项目基础类-文件检查🌟base.py基础类文件检查示例如下:🌟common模块的error.py脚本的代码如下:🌟utils.py模块check_f

CRM软件系统趣味性——游戏化销售管理

对于企业销售来说,高薪酬也伴随着更高的压力与挑战。高强度的单一工作会让销售人员逐渐失去对工作的兴趣,导致售状态缺少动力和激情,工作开展愈加困难。您可以通过CRM系统进行游戏化销售管理,让销售人员重新干劲满满。游戏并不是纯粹的娱乐,它其实还是提升个人竞争意识、团队协作的一种方式,因此,将它一味的妖魔化是不可取的。也正因如

热文推荐