简单聊聊微前端

news2024/10/6 4:02:09

简单聊聊微前端

  • 介绍
  • 微前端的优点
    • 应用间相互独立,互不依赖
    • 可以同时使用不同的技术栈
    • 可拓展性高
    • 可维护性更强,减少代码量
    • 提高开发和部署的效率
    • 团队的高度自主权
    • 错误隔离
  • 微前端的缺点
    • 依赖项冗余
    • CSS样式冲突和重叠
    • 性能比较差
    • 应用间的通信不够便捷
  • 实现微前端的几种途径
  • 小结

介绍

微前端不是一个框架,也不是一种技术,它是一种架构。把一个庞大的应用,按一定的规则切分成一系列可以单独部署的松耦合应用,再通过基座将这些应用组合成单个面向用户的应用程序。
通常,项目有不同大小的体积和不同的要求,如果你的项目很简单,只有简单的一些页面,一个团队可以全部搞定,那完全没有必要使用微前端,市面上有许多框架可以快速完成这个项目开发。但是,如果你的应用,是另一个大应用的其中一个子应用或者你的应用包含很多由多个不同的团队负责的功能,那么你就可以考虑一下使用微前端。
在这里插入图片描述

微前端的优点

应用间相互独立,互不依赖

允许工程师更新迭代子应用而不影响整个应用的使用体验。通过将应用拆分,可以对应用进行更细致的版本管理,各版本间的开发也不会互相影响,提高整体的开发速率。

可以同时使用不同的技术栈

微前端架构跟子应用的技术栈无关,应用可以由不同的技术栈编写(Vue、React、Angular),不需要花太多精力关心各个应用的设置跟构建。不同技术栈团队也可以很融洽的共同开发一个大应用。

可拓展性高

对于很多组织来说,一个老旧,庞大,技术栈落后,重构重写成本的成本高昂的应用是他们尝试使用微前端架构的重要原因。旧应用需要继续维护和迭代,又不想继续往旧应用添加新的功能模块,微前端架构支持我们对应用架构,应用依赖和用户体验进行渐进性升级。当我们想在尝试新的技术,也可以使用微前端的应用隔离特性,尽情地探索新技术。

可维护性更强,减少代码量

每一个拆分出来的子应用的代码量都要比单个巨型应用的代码量要小。小的代码库使开发变得更加简单。特别是微前端使我们避免了每一个应用开发者无意间和不恰当的组件耦合带来的复杂度的增加。

提高开发和部署的效率

跟后端的微服务一样,独立部署能力是微前端的关键。这个能力精确了应用部署的范围,从而降低了相关的风险。无论你的应用部署在哪里,它都有属于自己独立的构建、测试和部署的流水线。各个应用的流水线互不关联,它不关心其他子应用是否还在使用老旧的,手动的部署方式,还是其他子应用的开发者把半成品代码推送到master分支。

团队的高度自主权

将我们的代码库和发布周期结构的一个更高层次的好处是,每个团队可以完全拥有产品的一部分,拥有完全向客户交付价值所需要的一切,能够快速有效地行动。要做到这一点,这就要求团队需要围绕业务功能的垂直部分组成,而不是围绕技术能力。

错误隔离

微前端可以构建健壮的系统。子应用间相互隔离。当一个子应用完全崩溃时,不会影响到其他子应用。虽然我们都不乐意遇到发生应用崩溃的情况,但是这种情况无可避免,那么当崩溃发生之时,将影响的范围缩减到最小将是我们要思考的一方面。

微前端的缺点

软件工程没有“银弹”

依赖项冗余

子应用件相互独立,互不依赖,为了做到这一点,就要求每个子应用都有属于他自己的依赖,所以这时候,包管理器就失去了依赖包管理的好处。实际上,你的所有子应用可能会包含同个依赖的很多个不同版本。这无疑是个问题,这会导致你的应用增加了没有必要的体积,最后这些使用成本都会嫁接到用户身上,因为他们要下载更多的数据。

CSS样式冲突和重叠

从业务的角度来说,每个子应用都不应该有自己的样式风格,毕竟谁也不想看到一个样式五花八门,风格割裂的应用程序,所有样式、交互和动画都应该和谐统一。在开发子应用的时候,工程师可能会在不经意间,重写了CSS样式,更要命的是,在开发阶段,你通常指专注于你当前的应用,而应用上线以后,才发现样式对其他应用产生的影响。通常我们可以通过webpack给各个子应用类名添加统一的ID或者采用BEM的命名方案,避免子应用间样式的冲突。

性能比较差

当多个子应用同时运行在同一个页面通常会导致页面性能变差,因为每个框架实例都需要独立下载资源,占用CPU,RAM和网络带宽。因为开发子应用是独立开发的,所以在开发阶段,你很难留意到这一点。问题是当你的子应用作为一个实例部署到生产环境以后,就会存在同时打开多个子应用的情况,他们运行都需要占用一定的资源,所以会导致页面性能变差。

应用间的通信不够便捷

在应用刚刚起步的时候,除了一些罕见的场景,子应用间一般都不需要进行通信。这会让你误以为情况一直都是这样。同时,子应用间通信也跟微前端的核心概念“独立”背道而驰。然而技术最终是为业务服务的,尽管应用间的通信不是很便捷,现实中总会有这样或那样的情况,子应用间需要进行通信。比如,子应用间需要对全局配置进行同步。或者缓存公共接口的数据,避免重复请求浪费网络资源并提高用户的使用体验等等。这时候就需要应用到Cookie或者localstorage或者用户自定义事件,这些都给系统带来一些额外的开销和复杂度。

实现微前端的几种途径

  • Nginx反向代理
  • iframe
  • webComponent
  • Webpack module federation
  • qiankun 框架

小结

作为2016年就已经出现的概念,微前端的应用在前端行业已经算是比较成熟的解决方案。它的出现,无疑是前端行业的福音,但是我们对待任何技术都需要保持一种敬畏的心态,使用之前要评估我们的项目是否需要微前端来支持,否则的话就可能是搬石砸脚,徒增烦恼。-- manta

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

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

相关文章

CSS的基础知识讲解

文章目录 一.什么是CSS二. 选择器2.1 标签选择器2.2 类名选择器2.3 ID选择器2.4 属性选择器2.5 子选择器2.6 后代选择器2.7 伪类选择器 三.盒子模型3.1 什么是盒子模型3.2 盒子的组成部分边框内边距外边距 四.弹性盒子布局4.1 什么是块级元素和行内元素块级元素行内元素行内元素…

◆ 前端工程化 ◆ webpack 的基本使用 ◆ webpack 中的插件 ◆ webpack 中的 loader ◆ 打包发布 ◆ Source Map

◆ 前端工程化 ◆ webpack 的基本使用 ◆ webpack 中的插件 ◆ webpack 中的 loader ◆ 打包发布 ◆ Source Map ◆ 前端工程化◆ webpack 的基本使用◆ webpack 中的插件◆ webpack 中的 loader1. loader 概述打包处理css文件打包处理less文件打包处理样式表中与url路径相关的…

Python——2

一、循环 1.range() 函数 用于生成一个整数序列,返回的是一个迭代对象,可用 in / not in查看。 (1)range(stop) 创建一个 [0,stop) 的整数序列,步长为1。 (2)range(start, stop) 创建一个 [s…

面试谎报了职级,本来是6,谎报成7,已经到HR这一步了,怎么了?

面试时谎报职级,公司能查出来吗? 一位网友说,自己在业务面时谎报了职级,把6报成7,现在已经到hr这一步了,该怎么办?是继续编吗? 有人不明白,为什么要谎报职级?…

Pycharm 安装教程,及常用快捷键,附教程

简介 PyCharm是一款Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如, 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外,该IDE提供了一些高级功能&a…

有史以来最强的5G入门科普!

一个简单且神奇的公式 今天的故事,从一个公式开始讲起。 这是一个既简单又神奇的公式。说它简单,是因为它一共只有3个字母。而说它神奇,是因为这个公式蕴含了博大精深的通信技术奥秘,这个星球上有无数的人都在为之魂牵梦绕。…

CloudCompare二次开发之如何配置PCL点云库?

文章目录 0.引言1.修改两个CMakeLists.txt文件2.源码编译3.测试PCL 0.引言 因笔者课题涉及点云处理,需要通过PCL进行点云数据分析处理,查阅现有网络资料,实现了VisualStudio2015(x86)配置PCL1.8.1点云库(见:VisualStud…

基于卷积的图像分类识别(七):SENet

系列文章目录 本专栏介绍基于深度学习进行图像识别的经典和前沿模型,将持续更新,包括不仅限于:AlexNet, ZFNet,VGG,GoogLeNet,ResNet,DenseNet,SENet,MobileN…

网络编程 lesson3 UDP基础编程

目录 UDP介绍 UDP编程 函数接口 recvfrom sendto 小练习:实现服务器和客户端相连(使用UDP实现) client server UDP介绍 UDP(User Datagram Protocol,用户数据报协议)是一种在计算机网络中常用的传输…

C++常量成员函数(类成员函数后加const、类成员函数参数列表后加const)常量对象(类名前加const)和非常量对象

文章目录 常量对象和非常量对象(常量对象不能调用非常量成员函数)常量成员函数(常量成员函数不能修改类的数据成员;常量成员函数只能调用常量成员函数,不能调用非常量成员函数) 常量对象和非常量对象&#…

网络编程 lesson1 网络概念

目录 网络发展史(了解) 局域网和广域网 局域网 广域网 IP地址 IP地址划分(IPV4) IP地址取址范围: 特殊地址 子网掩码 子网号(注意和前面进行区分) 练习 练习1: 练习2&…

MySQL 数据库之 MMM 高可用架构构建

一、MMM 概述 1. 什么是 MMM   MMM(Master-Master replication manager for MySQL,MySQL 主主复制管理器)是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语言开发,主要从来监控和管理 MySQL Master-Master&a…

工厂模式中简单工厂模式、工厂方法模式、抽象工厂模式的分析与总结

工厂模式 工厂模式有许多变体,其中最常见的有三种 简单工厂模式工厂方法模式抽象工厂模式 简单工厂代码分析 UML图中我们可以清晰的看到代码结构 ,首先我们创建一个Car的汽车接口,定制汽车的基本规范,汽车可以的方法是可以跑,所以我们定义了一个抽象的run方法. 定义汽车接口…

【sed编辑器】

目录 一、sed编辑器二、sed的命令格式操作命令1.1、命令演示 二、替换三、插入 一、sed编辑器 1、sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 2、sed编辑器可以根据命令来处理数据流中的数据,这些命令要么…

OSC Liblo Window10配置

OpenSoundControl一种网络通讯协议,想了解详情的自行打开网站。 liblo 是最知名的OSC库, 功能完整,用 C 和 LGPL 许可编写。 下载请前往GitHub库。 解压后安装过程如下,需要用到CMake: 1.选择源代码文件和构建工程的文…

一文读懂“生成式 AI”

一、前言 本文基于谷歌的:《Introduction to Generative AI》 并且借助 ChatGPT 整理而成,帮助大家理解生成式 AI 这个概念。 主要包括 4 个部分: 生成式 AI 的定义生成式 AI 的工作原理生成式 AI 模型的分类生成式 AI 的应用 二、生成式…

【数据结构】双向带头循环链表的实现

目录 全部代码 图例(双向带头循环链表) 各个功能的实现 创建该链表的节点 创建初始链表 链表的头插 链表的尾插 链表的随机插入 链表的头删 链表的尾删 链表的随机删除 链表的销毁 链表是否为空的判断 链表节点的创建 总结 全部代码 typ…

命令行更新Windows

命令行更新Windows powershell命令行更新安装 Windows Update module for Windows Powershell连接到 Windows Update 服务器并下载更新安装下载好的 Windows Update 更新 cmd执行Windows update更新检查更新下载 Windows Update 更新安装更新安装更新后重新启动设备 win10以下版…

Python中Pandas库的相关操作

目录 Pandas库 常用操作 创建DataFrame 查看数据 数据选择和过滤 数据排序和排名 缺失数据处理 数据聚合和分组 数据的合并和连接 Pandas库 Pandas是Python中常用的数据处理和分析库,它提供了高效、灵活且易于使用的数据结构和数据分析工具。 1.Series&a…

实例35---字符串反转,如将字符串 “www.runoob.com“ 反转为 “moc.boonur.www“。

文章目录 前言一、题目描述 二、题目分析 三、解题 1.解题方法一--- for循环来将字符的下标数值进行对每一个字符进行交换 ---程序运行代码 2.解题方法二------ 指针 ------ 程序运行代码(1)程序运行代码优化 总结 前言 本系列为C语言菜鸟100道基础经典例题详解刷题系列。点滴…