【微前端】前端微服务框架对比和技术选型

news2024/12/25 9:10:07

文章目录:

目录

文章目录:

前言:

具体内容:

1.什么是微前端

2.使用微服务的场景:

iframe方案的缺点:

3.主流微服务框架介绍

2.1 无界-腾讯

官网

github地址:

无界的运行模式

简单了解一下原理

主要特性:

优势:

劣势:

2.2 MicroApp-京东

官网:

github地址:

主要特性:

优势:

劣势:

2.3 qiankun-蚂蚁

官网:

github地址:

主要特性:

优势:

劣势:

4.技术选型总结:

最后


前言:

技术的世界就像一座神秘的城堡,充满了未知的宝藏和谜题。而我,作为一名执着的探索者,在不断的追寻中,有了新的发现和感悟,在此与您分享。

本篇文章,我们主要是分析前端几大主流微服务框架,做对比方便选型。


具体内容:

1.什么是微前端

微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。通俗来说,就是在一个web应用中可以独立的运行另一个web应用。

2.使用微服务的场景:

  • 老旧技术栈项目也能平滑迁移至新的技术栈,提升项目的可扩展性
  • 主应用不限制接入应用的技术栈,微应用可以自主选择技术栈
  • 独立部署,降低一个前端应用每次部署涉及的范围,一定程度上减少了项目风险

举例

  • 比如制作一个企业管理平台,把已有的采购系统和财务系统统一接入这个平台;

  • 比如有一个巨大的应用,为了降低开发和维护成本,分拆成多个小应用进行开发和部署,然后用一个平台将这些小应用集成起来;

  • 又比如一个应用使用vue框架开发,其中有一个比较独立的模块,开发者想尝试使用react框架来开发,等模块单独开发部署完,再把这个模块应用接回去

iframe方案的缺点:

  • 路由状态丢失,刷新一下,iframeurl状态就丢失了
  • dom割裂严重,弹窗只能在iframe内部展示,无法覆盖全局
  • web应用之间通信非常困难
  • 每次打开白屏时间太长,对于SPA 应用来说无法接受

3.主流微服务框架介绍

2.1 无界-腾讯

腾讯在维护的,后起之秀,非常轻量,4k star,无痛接入 vite。

官网

微前端是什么 | 无界

github地址:

GitHub - Tencent/wujie: 极致的微前端框架

无界的运行模式

此图为无界官方文档的运行模式图

简单了解一下原理

1)CSS 隔离:使用 shadowDOM 隔离

2)JS 隔离:使用一个空的 iFrame 隔离

3)多应用通讯:使用 Proxy

主要特性
  • 低成本:主应用和子应用的适配成本都极低。
  • 高速度:支持静态资源预加载和子应用预执行,提升首屏打开速度和运行速度。
  • 原生隔离:通过Web Components + Shadow DOM实现css原生隔离,通过iframe实现js原生隔离。
  • 强大功能:支持子应用保活、多应用激活、去中心化通信、vite框架支持、应用共享等。
优势:

成本低、速度快、原生隔离、功能强。

劣势:

官方文档和社区支持相对较少,可能增加学习成本。


2.2 MicroApp-京东

由京东开发,star 5.5k, 是一个基于WebComponents的前端微服务框架,支持多种前端框架。

官网:

MicroApp

github地址:

GitHub - micro-zoe/micro-app: A simple, efficient and powerful micro front-end framework. 一款简约、高效、功能强大的微前端框架

主要特性
  • 无关技术栈:不限制子应用的技术栈。
  • 组件化渲染:通过CustomElement结合ShadowDom实现组件化渲染。
  • JS隔离与样式隔离:提供沙箱机制和样式隔离方案,降低子应用接入成本。
  • 虚拟路由系统:解决子应用之间的路由冲突问题。
  • 支持vite:通过iframe沙箱方案支持vite项目。
优势

兼容所有框架,灵活性高;

提供了JS沙箱、样式隔离、元素隔离、预加载、数据通信等一系列完善的功能。

劣势

需要时间学习;

对于不支持WebComponents的浏览器没有做降级处理。


2.3 qiankun-蚂蚁

该框架是蚂蚁在维护的,15.7k star,目前官方使用的是 webpack 作为构建工具,没有明确表示支持 vite,社区有 vite-plugin-qiankun 插件支持。

是一个基于Single-SPA的微前端实现库。它提供了较高的代码库隔离性和灵活性,支持多种框架和构建工具。

官网:

qiankun - qiankun

github地址:

GitHub - umijs/qiankun: 📦 🚀 Blazing fast, simple and complete solution for micro frontends.

主要特性
  • 技术栈无关:支持多种前端技术栈。
  • 样式隔离:提供css沙箱方案,防止样式冲突。
  • JS沙箱:包括SnapshotSandbox、LegacySandbox、ProxySandbox三套方案,确保JS隔离。
  • 预加载能力:支持静态资源预加载,提升性能。
  • 丰富的功能:如应用加载与切换、父子应用通信等。
优势:
  • 子应用可独立开发、独立部署,不会相互影响;
  • 子应用间通信灵活。
劣势:
  • 基于路由匹配,无法同时激活多个子应用,也不支持子应用保活
  • 改造成本较大,从 webpack、代码、路由等等都要做一系列的适配
  • css 沙箱无法绝对的隔离,js 沙箱在某些场景下执行性能下降严重
  • 无法支持 vite 等 ESM 脚本运行

4.技术选型总结:

qiankun适合需要技术栈无关且功能完备的场景;

MicroApp适合追求接入简单和性能优化的场景;

无界则适合追求低成本、高速度和原生隔离的场景。

在实际应用中,可以根据项目情况灵活选择或组合使用这些框架。

最后

如果说

友友们之间的点赞

展现的是相互之间的支持,善意和友情

那么

你对我文章的认真阅读

则是对我的劳动成果的

默默地承认和支持

每一次创文的过程

都是我锻炼自己逻辑思维能力和语言组织能力的过程

也是我

不断深悟生活,思考人生的过程

每一篇文章的形成

都是我心血的结晶

感谢您的阅读

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

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

相关文章

git笔记:git常用命令备忘录

1、工作区域和文件状态 1.1、工作区域 git的数据管理分为四个区域: 工作区(Working Directory) 本地工作目录,是我们电脑上的目录,是我们实际编写代码的区域,修改完工作区的文件后可以使用git add命令将…

Web开发:在 try-catch 块中有效捕捉和记录日志的最佳实践

目录 一、控制台程序(demo) 二、封装方法 三、实现效果 一、控制台程序(demo) using System.Diagnostics;namespace Progaram {class Program{public class Student{public int Id { get; set; }public string Name { get; se…

DataWhale AI夏令营-《李宏毅深度学习教程》笔记

DataWhale AI夏令营-《李宏毅深度学习教程》笔记 第三章 深度学习基础补充一些基础临界点及其种类逃离临界点方法批量动量自适应学习率学习率调度 分类分类损失批量归一化 之前一直接触的LLM大模型做一些应用,或者传统的自然语言处理,都是直接拿别人的模…

坐牢第三十天(c++)

1.作业&#xff1a; 提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数 #include <iostream> #include <stdio.h> #include <string> using namespace std; int main(int argc, char const *argv[]) {string st…

什么软件可以用平板远程控制电脑?

在当今快节奏的工作和生活中&#xff0c;使用平板远程控制电脑已成为一种便捷高效的办公方式。无论你是想随时随地访问办公室的电脑&#xff0c;还是需要在旅途中进行紧急工作任务&#xff0c;Splashtop都是你的不二选择。本文将介绍如何使用Splashtop通过平板远程控制电脑&…

谷粒商城实战笔记-260-商城业务-消息队列-可靠投递-消费端确认

文章目录 一,Ack消息确认机制简介1,简介2,两个常用的Api二,消费者端消息确认实战三,RabbitMQ可靠性保障总结1,生产者2,消费者一,Ack消息确认机制简介 消费者端的确认机制(ACK/NACK)是RabbitMQ中一种重要的特性,它允许消费者告知Broker它们是否成功处理了接收到的消息…

ARM32开发——(六)GPIO_USART通信原理

1. 串行通信和并行通信 1.1 串行通信 串行通信是一种数据传输的方式&#xff0c;它是指将数据按照一位一位的顺序依次发送和接收&#xff0c;常用于远距离通信、嵌入式系统和低带宽传输场景下。串行通信相对于并行通信而言&#xff0c;只需要传输一条数据线&#xff0c;相对简…

Cgroup Driver配置异常导致的节点k8s涉及到的pod无法启动问题的处理

文章目录 前言一、现象二、问题定位1.docker服务检查2.message日志检查3.检查Cgroup Driver的配置4.修改/etc/docker/daemon.json文件 总结 前言 Cgroup Driver配置异常导致的节点k8s涉及到的pod无法启动问题的处理。 同事有台云主机重启之后&#xff0c;发现k8s相关的pod全部…

优维er看网易云之崩:巨头稍息的一小步,行业前进的一大步

撰文&#xff1a;右耳失聪的左撇子 制图&#xff1a;脾气超好 8月19日&#xff0c;网易云当了半天的“网抑云”&#xff0c;不开玩笑&#xff0c;我认为这是一场&#xff1a;真技术滑铁卢。 和很多朋友一样&#xff0c;数字音乐早已经深度融入我的日常生活&#xff0c;而作为一…

xss-labs靶场通关详解(11-15关)

第11关 referer 进行抓包 添加referer:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第12关 进行抓包 修改User Agent&#xff1a;click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第13关 抓包 修改C…

python列表去重,一行实现 太优雅~

今天咱们来聊聊在 Python 中如何优雅地实现列表去重。 这是一个非常经典的问题&#xff0c;虽然很多人都会&#xff0c;但如何更优雅的实现呢&#xff1f;这里有不少有趣的解决方法。话不多说&#xff0c;咱们直奔主题。 方法一&#xff1a;用 set 去重 先来看个最简单的方法…

C语言基础(二十一)

C语言中的链表是一种常见的数据结构&#xff0c;用于存储一系列的元素&#xff0c;但与数组不同的是&#xff0c;链表中的元素在内存中不是连续存储的。链表中的每个元素称为节点&#xff08;Node&#xff09;&#xff0c;每个节点包含两个部分&#xff1a;一部分是存储数据的数…

智能开发工具GoLand v2024.2全新发布——更好地支持Go框架和语言

GoLand 使 Go 代码的阅读、编写和更改变得非常容易。即时错误检测和修复建议&#xff0c;通过一步撤消快速安全重构&#xff0c;智能代码完成&#xff0c;死代码检测和文档提示帮助所有 Go 开发人员&#xff0c;从新手到经验丰富的专业人士&#xff0c;创建快速、高效、和可靠的…

美创科技荣获“中国数据安全领域最具商业合作价值企业”

近日&#xff0c;数据智能产业创新服务媒体“数据猿”联合上海大数据联盟正式发布《2024中国数据安全领域最具商业合作价值企业盘点》&#xff0c;美创科技凭借在数据安全领域专业领先能力&#xff0c;荣获“最具商业合作价值企业”。 《2024中国数据安全领域最具商业合作价值企…

【Qt】Qt系统 | Qt文件

文章目录 一. 输入输出设备类二. 文件读写类三. 文件和目录信息 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力&#xff0c;封装了很多关于文件的类&#xff0c;通过这些类能够对文件系统进行操作&#xff0c;如文件读写、文…

Ubuntu上搭建Nginx环境

1. 软件包下载 nginx下载地址 下载linux版本的nginx&#xff0c;如图圈示 2. 将下载好的软件包上传至Linux服务器 假设上传到 /opt/nginx 目录,进入目录 cd /opt/nginx解压&#xff0c;根据版本自行修改版本号 tar zxvf nginx-1.16.0.tar.gz3.安装 安装编译所需的依赖&a…

IGE-LIO:充分利用强度信息克服激光退化场景下的定位精度

更多优质内容&#xff0c;请关注公众号&#xff1a;智驾机器人技术前线 1.论文信息 论文标题&#xff1a;IGE-LIO: Intensity Gradient Enhanced Tightly-Coupled LiDAR-Inertial Odometry 作者&#xff1a;Ziyu Chen, Hui Zhu, Biao Yu, Chunmao Jiang, Chen Hua, Xuhui Fu a…

android openGL ES详解——深度缓冲区

一、深度缓冲区概念 深度缓存区是指一块专门内存区域&#xff0c;存储在显存中&#xff0c;用于存储屏幕上所绘制图形的每个像素点的深度值。深度值越大&#xff0c;离观察者越远。深度值越小&#xff0c;里观察者越近。 深度缓冲区与帧缓冲区相对应&#xff0c;用于记录上面…

Linux 进程 | 进程优先级进程的环境变量

文章目录 进程概念4、进程优先级4.1基本概念4.2查看系统进程4.2.1 ps -l4.2.2 PRI & NI 4.3用top命令更改已存在进程的nice&#xff1a; 5、环境变量5.1常见环境变量5.2查看环境变量5.3测试PATH配置环境变量 5.4代码中获取环境变量5.4代码中获取环境变量 进程概念 4、进程…

Linux网络:TCP UDP socket

Linux网络&#xff1a;TCP & UDP socket socket 套接字sockaddr网络字节序IP地址转换bzero UDP socketsocketbindrecvfromsendto TCP socketsocketbindlistenconnectacceptsendrecv 本博客讲解 Linux 下的 TCP 和 UDP 套接字编程。无论是创建套接字、绑定地址&#xff0c;还…