初探微前端

news2024/11/18 7:24:50

微前端

  • 一、微前端的背景和概述
    • 1.1 概念
    • 1.2 特点
    • 1.3 背景
  • 二、微前端的实现方式
    • 2.1 服务端集成
    • 2.2 运行时集成
  • 三、现有的解决方案
    • 3.1 single-spa
    • 3.2 qiankun
    • 3.3 micro-app
  • 四、总结

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

一、微前端的背景和概述

在这里插入图片描述

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

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 等,开发者可以根据自己的需求选择最合适的解决方案进行开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1025338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何构建高效的接口自动化测试框架(文档+视频讲解)

在选择接口测试自动化框架时&#xff0c;需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说&#xff0c;使用Python相关的测试框架更为便捷。无论选择哪种框架&#xff0c;重要的是确保 框架功能完备&#xff0c;易于维护和扩展&#xff0c;提高测试效率和准确性。今…

最新版小说泛站群系统源码 小说泛目录站群源码系统程序/PHP语言(源码+教程)

源码简介&#xff1a; 新版小说泛目录站群系统网站源码&#xff08;小说站群源码&#xff09;&#xff0c;PHP小说泛站群系统程序&#xff0c;网站优化泛目录站群源码&#xff0c;新版小说泛站群系统源码&#xff0c;小说站群源码&#xff0c;小说泛目录站群源码PHP语言操作简…

《合成孔径雷达成像算法与实现》Figure5.4

clc clear close all%% 参数设置 Ta 128; % 脉冲持续时间 Ka -0.085; % 方位向调频率 alpha_OS [5,0.25]; …

《Python趣味工具》——自制emoji(4)计算机二级考试题

前面我们学习了如何制作emoji&#xff0c;相信你也是有很多想法了吧&#xff01;今天我们就来看看几道计算机二级考试真题。 1. 绘制套圈 使用turtle库的circle()函数和seth()函数绘制套圈。 最小的圆圈半径为10像素&#xff0c;不同圆圈之间的半径差是40像素。 ps:注意要和题…

【生物信息学】奇异值分解(SVD)

目录 一、奇异值分解&#xff08;SVD&#xff09; 二、Python实现 1. 调包np.linalg.svd() 2. 自定义 三、SVD实现链路预测 一、奇异值分解&#xff08;SVD&#xff09; SVD分解核心思想是通过降低矩阵的秩来提取出最重要的信息&#xff0c;实现数据的降维和去噪。 ChatG…

针对敏感数据的安全转录服务

即便在新冠肺炎疫情期间&#xff0c;继续保持了最高级别的机密性 新冠肺炎疫情带来的各种限制向所有服务提供商提出了挑战&#xff0c;促使提供商们想方设法采取更富想象力的新方法来满足客户的需求。澳鹏采用了一种由两种方案组成的工作机制&#xff0c;服务于客户机密材料的…

systrace使用注意事项

打开systrace文件报错&#xff1a;Unable to select a master clock domain because no path can be found from “SYSTRACE” to “LINUX_FTRACE_GLOBAL”. 使用systrace生成的trace.html文件无法打开&#xff0c;或者报上面的错误&#xff0c;可以选择下面这个方式&#xff1…

Springboot 实践(19)负载平衡配置与运用

前文Springboot 实践&#xff08;1&#xff09;至Springboot 实践&#xff08;18&#xff09;&#xff0c;我们分别讲解了springboot数据源配置、swagger-ui测试controller、整合security、整合Oauth2.0、服务注册、路由配置以及配置中心等单例功能开发&#xff0c;实现了各个系…

Avalonia开发(一)环境搭建

一、介绍 开源 GitHub&#xff1a;https://github.com/AvaloniaUI/Avalonia/多平台支持&#xff0c;包括Windows、mac OS、Linux、iOS、Android、Samsung Tizen&#xff08;很快支持&#xff09;、WebAssemblyIDE支持&#xff0c;Visual Studio扩展支持&#xff0c;JetBrains …

NLP技术如何为搜索引擎赋能

目录 1. NLP关键词提取与匹配在搜索引擎中的应用1. 关键词提取例子 2. 关键词匹配例子 Python实现 2. NLP语义搜索在搜索引擎中的应用1. 语义搜索的定义例子 2. 语义搜索的重要性例子 Python/PyTorch实现 3. NLP个性化搜索建议在搜索引擎中的应用1. 个性化搜索建议的定义例子 2…

学习笔记-接口测试(postman、jmeter)

目录 一、什么是接口测试 二、前端和后端 三、get请求和post请求的区别 四、cookie和session 五、接口测试的依据 六、HTTP状态码 七、通用接口用例 八、postman接口测试 九、Jmeter接口测试 一、什么是接口测试 通常做的接口测试指的是系统对外的接口&#xff0c;比…

【深度学习】 Python 和 NumPy 系列教程(九):NumPy详解:1、创建数组的n种方式

目录 一、前言 二、实验环境 三、NumPy 0. 多维数组对象&#xff08;ndarray&#xff09; a. 多维数组的属性 1. 创建数组 a. 使用numpy.array函数&#xff1a; b. 使用numpy.zeros函数 c. 使用numpy.ones函数 d. 使用numpy.arange函数 e. 使用numpy.linspace函数 …

旋转链表-双指针思想-LeetCode61

题目要求&#xff1a;给定链表的头结点&#xff0c;旋转链表&#xff0c;将链表每个节点向右移动K个位置。 示例&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k2 输出&#xff1a;[4,5,1,2,3] 双指针思想&#xff1a; 先用双指针策略找到倒数K的位置&#xff0c;也就是(…

根据商品ID获得淘宝商品详情, 获得淘宝商品详情高级版,获得淘宝商品评论, 获得淘宝商品快递费用 ,获得淘口令真实,批量获得淘宝商品上下架时间)

参数说明 通用参数说明 参数不要乱传&#xff0c;否则不管成功失败都会扣费url说明 https://api-gw.…….cn/平台/API类型/ 平台&#xff1a;淘宝&#xff0c;京东等&#xff0c; API类型:[item_search,item_get,item_search_shop等]version:API版本key:调用key,测试key:test_…

火山引擎A/B测试在消费行业的案例实践

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;火山引擎数智平台举办了“走进火山-全链路增长&#xff1a;数据飞轮转动消费新生力”的活动&#xff0c;其中火山引擎数智平台DataTester产品负责人…

家居设计软件Live Home 3D Pro mac中文版特点介绍

Live Home 3D Pro mac是一款专业的3D家居设计软件&#xff0c;可以帮助用户轻松创建和设计家居平面图和3D模型&#xff0c;并进行渲染和虚拟漫游。​​​​​​​ ​Live Home 3D Pro mac软件特点 1. 界面友好&#xff1a;Live Home 3D Pro的界面友好&#xff0c;操作简单方便…

MyBatis基础之SqlSession

SqlSession 线程安全问题 当你翻看 SqlSession 的源码时&#xff0c;你会发现它只是一个接口。我们通过 MyBatis 操作数据库&#xff0c;实际上就是通过 SqlSession 获取一个 JDBC 链接&#xff0c;然后操作数据库。 SqlSession 接口有 3 个实现类&#xff1a; #实现类1Defa…

北斗+渔业:且看北斗卫星如何提升渔业监管水平

近日&#xff0c;为确保渔业船舶海上航行安全和管理&#xff0c;海南省农业农村厅近日发布通告&#xff1a;全省小型海洋渔船须于今年9月30日前完成北斗船载终端安装&#xff0c;大中型海洋渔船须于今年11月30日前同时完成北斗船载终端和“插卡式AIS”终端安装。 近年来&#x…

两种风格的纯CSS3加载动画

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>加载动画</title><style>.loader {w…

调用feign接口时手动设置请求头信息

调用feign接口手动设置请求头 一 需求场景&#xff1a;二 解决方法2.1 feign接口添加RequestHeader的注解2.2 provider正常从请求头获取参数2. 3 consumer手动传参2.4 测试 一 需求场景&#xff1a; 我们在provider服务有些参数是从请求头中获取的&#xff0c;但是consumer服务…