微前端框架是为了解决项目应用在大型项目中带来的复杂性和维护难题而提出的技术方案。

微前端框架是为了解决单页应用(SPA)在大型项目中带来的复杂性和维护难题而提出的技术方案。Qiankun.jsMicroAppWujie 是三种流行的微前端框架。以下是对这三种框架的优缺点分析:
在这里插入图片描述

Qiankun.js

优点
  1. 成熟度高:Qiankun.js 基于 Single-SPA,并针对中国开发者进行了优化和本地化,已经得到了广泛的应用和验证。
  2. 生态系统完善:提供了丰富的插件和工具链,支持快速集成和上手。
  3. 框架无关性:支持 React、Vue、Angular 等多种主流前端框架,可以在同一个项目中同时使用多种技术栈。
  4. 灵活性强:可以自由选择是否使用沙箱隔离、应用加载策略等,满足不同场景需求。
  5. 社区活跃:有较多的社区资源和支持,问题解决较快。
缺点
  1. 复杂度高:由于其功能强大,配置和使用相对复杂,对开发者的技术要求较高。
  2. 性能开销:在某些场景下,沙箱隔离机制会带来一定的性能开销。

MicroApp

优点
  1. 轻量级:MicroApp 体积小,性能较好,适合对性能要求较高的项目。
  2. 简单易用:上手简单,API 设计清晰,开发成本低。
  3. 兼容性好:支持各种主流前端框架,并且能够与现有项目无缝集成。
  4. 灵活性强:提供灵活的加载和卸载机制,支持动态应用加载。
缺点
  1. 功能较少:相比 Qiankun.js,MicroApp 的功能相对较少,不支持某些高级特性。
  2. 社区资源较少:社区相对不够活跃,遇到问题时可能需要更多时间解决。

Wujie

优点
  1. 高度隔离:Wujie 强调应用间的高度隔离,保证各个子应用之间不会互相影响。
  2. 高性能:针对性能进行了优化,适合对性能要求较高的项目。
  3. 现代化设计:采用现代化的设计思想,支持最新的前端技术和工具链。
缺点
  1. 相对较新:相较于 Qiankun.js 和 MicroApp,Wujie 较为新颖,社区和生态系统尚在发展中。
  2. 文档和支持:由于其新颖性,文档和支持可能不如 Qiankun.js 完善。

总结

  • Qiankun.js 适合大型项目和复杂场景,功能全面,但使用复杂度较高。
  • MicroApp 适合中小型项目,追求轻量级和高性能,功能相对较少。
  • Wujie 适合现代化前端项目,强调隔离和性能,但社区资源和支持尚待发展。

1. Qiankun.js

安装
npm install qiankun
基本使用方法
  1. 主应用配置

在主应用中,配置 qiankun 并注册子应用:

import { registerMicroApps, start } from 'qiankun';registerMicroApps([{name: 'reactApp',entry: '//localhost:7100',container: '#container',activeRule: '/react',},{name: 'vueApp',entry: '//localhost:7101',container: '#container',activeRule: '/vue',},
]);start();
  1. 子应用配置

在子应用中,添加 qiankun 的生命周期函数:

import './public-path';
import Vue from 'vue';
import App from './App.vue';Vue.config.productionTip = false;let instance = null;
function render(props = {}) {const { container } = props;instance = new Vue({render: h => h(App),}).$mount(container ? container.querySelector('#app') : '#app');
}if (!window.__POWERED_BY_QIANKUN__) {render();
}export async function bootstrap() {console.log('Vue app bootstraped');
}
export async function mount(props) {render(props);
}
export async function unmount() {instance.$destroy();instance = null;
}
  1. 主应用中加载子应用的 HTML 文件
<div id="container"></div>
更多功能
  • 沙箱隔离qiankun 支持多种沙箱隔离策略,可以在注册子应用时配置。
  • 全局状态管理:可以通过 qiankun 提供的 initGlobalState 方法进行全局状态管理。

2. MicroApp

安装
npm install @micro-zoe/micro-app
基本使用方法
  1. 主应用配置

在主应用中,引入并使用 MicroApp

import microApp from '@micro-zoe/micro-app';microApp.start();

在 HTML 中嵌入子应用:

<micro-app name="vue-app" url="http://localhost:7101/"></micro-app>
<micro-app name="react-app" url="http://localhost:7100/"></micro-app>
  1. 子应用配置

在子应用中无需特殊配置,只需正常开发应用,确保入口文件(如 index.html)能够被主应用访问即可。

更多功能
  • 应用间通信:使用 microApp 提供的通信接口可以实现主应用和子应用间的通信。
  • 加载策略:可以配置子应用的加载和卸载策略。

3. Wujie

安装
npm install wujie
基本使用方法
  1. 主应用配置

在主应用中,引入并使用 Wujie

import { createWujieApp } from 'wujie';const app = createWujieApp({el: '#app',apps: [{name: 'vueApp',url: 'http://localhost:7101/',container: '#container',activeRule: '/vue',},{name: 'reactApp',url: 'http://localhost:7100/',container: '#container',activeRule: '/react',},],
});app.start();
  1. 子应用配置

在子应用中无需特殊配置,只需正常开发应用,确保入口文件(如 index.html)能够被主应用访问即可。

更多功能
  • 应用隔离:Wujie 强调应用间的高度隔离,确保不同子应用之间不会互相影响。
  • 性能优化:Wujie 进行了大量性能优化,适合对性能要求较高的项目。

虚拟路由(Virtual Routing)在微前端框架中起着关键作用,它允许主应用和子应用之间协调 URL 路由的变化,以便用户在访问某个路径时,能够正确加载对应的子应用。下面分别介绍 Qiankun.jsMicroAppWujie 这三种微前端框架的虚拟路由使用方式及优缺点。

1. Qiankun.js

虚拟路由使用方式

Qiankun 中,主应用和子应用都可以拥有自己的路由系统。主应用使用路由来激活不同的子应用,而子应用本身也可以有独立的路由。

  • 主应用配置

在主应用中,通过 registerMicroApps 注册子应用时,指定 activeRule 来匹配 URL 路径:

import { registerMicroApps, start } from 'qiankun';registerMicroApps([{name: 'reactApp',entry: '//localhost:7100',container: '#container',activeRule: '/react',},{name: 'vueApp',entry: '//localhost:7101',container: '#container',activeRule: '/vue',},
]);start();
  • 子应用配置

子应用可以使用各自的路由库(如 react-routervue-router)来管理内部路由。

// Vue 子应用示例
import Vue from 'vue';
import Router from 'vue-router';
import App from './App.vue';
import routes from './routes';Vue.use(Router);const router = new Router({ routes });new Vue({router,render: h => h(App)
}).$mount('#app');
优缺点分析
  • 优点

    • 灵活性高,主应用和子应用都可以独立管理自己的路由。
    • 子应用可以使用自己熟悉的路由库,无需对现有代码进行大幅修改。
  • 缺点

    • 需要手动处理主应用和子应用的路由切换,尤其是嵌套多层子应用时,配置和管理较复杂。
    • 对于复杂的路由场景,主应用和子应用之间的 URL 同步和参数传递可能会比较麻烦。

2. MicroApp

虚拟路由使用方式

MicroApp 支持子应用的独立路由,同时通过 micro-app 标签来嵌入子应用,并且子应用可以与主应用路由进行联动。

  • 主应用配置

在主应用中,直接使用 micro-app 标签来嵌入子应用。

<!-- 主应用 HTML -->
<micro-app name="vue-app" url="http://localhost:7101/"></micro-app>
<micro-app name="react-app" url="http://localhost:7100/"></micro-app>
  • 子应用配置

子应用依然可以使用各自的路由库来管理路由。

// React 子应用示例
import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import App from './App';const Root = () => (<Router><Switch><Route path="/" component={App} /></Switch></Router>
);export default Root;
优缺点分析
  • 优点

    • 使用方式简单,主应用和子应用之间路由解耦,子应用可以独立开发和调试。
    • 子应用可以使用自己熟悉的路由库,减少学习成本。
  • 缺点

    • 主应用与子应用的路由联动可能需要额外处理。
    • 对于复杂的路由场景,可能需要额外的逻辑来处理 URL 同步和参数传递。

3. Wujie

虚拟路由使用方式

Wujie 强调应用间的高度隔离,同时提供灵活的路由管理方案。主应用和子应用都可以独立管理自己的路由。

  • 主应用配置

在主应用中,通过 createWujieApp 注册子应用,并指定 URL 和容器。

import { createWujieApp } from 'wujie';const app = createWujieApp({el: '#app',apps: [{name: 'vueApp',url: 'http://localhost:7101/',container: '#container',activeRule: '/vue',},{name: 'reactApp',url: 'http://localhost:7100/',container: '#container',activeRule: '/react',},],
});app.start();
  • 子应用配置

子应用可以使用各自的路由库来管理路由。

// Vue 子应用示例
import Vue from 'vue';
import Router from 'vue-router';
import App from './App.vue';
import routes from './routes';Vue.use(Router);const router = new Router({ routes });new Vue({router,render: h => h(App)
}).$mount('#app');
优缺点分析
  • 优点

    • 强调应用间的隔离,主应用和子应用都可以独立管理路由,减少互相干扰。
    • 子应用可以使用自己熟悉的路由库,无需对现有代码进行大幅修改。
  • 缺点

    • 需要额外处理主应用和子应用的路由联动,尤其是在路径同步和参数传递方面。
    • 对于复杂的路由场景,可能需要额外的逻辑来处理 URL 同步和状态管理。

总结

  • Qiankun.js 提供灵活的路由管理方案,但需要手动处理主应用和子应用的路由切换,适合大型复杂项目。
  • MicroApp 使用简单,主应用和子应用解耦,适合中小型项目,但路由联动需要额外处理。
  • Wujie 强调应用隔离,使用灵活,但需要额外处理路由联动,适合现代前端项目。

压图地址

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

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

相关文章

【知识学习】阐述Unity3D中FogLOD的概念及使用方法示例

在Unity3D中&#xff0c;Fog&#xff08;雾效&#xff09;和LOD&#xff08;Level of Detail&#xff0c;细节层次&#xff09;是两种用于提高场景视觉效果和性能的技术。 Fog&#xff08;雾效&#xff09; 雾效是一种视觉效果&#xff0c;用于模拟大气中的雾或烟&#xff0c…

YOLOv8数据集标注

1 简介 数据集是必不可少的部分&#xff0c;数据集的优劣直接影响训练效果。一般来说&#xff0c;一个完整的数据集应该包括训练集、测试集和验证集。通常&#xff0c;数据集会被划分为训练集和测试集&#xff0c;比如将数据集的70%用作训练集&#xff0c;30%用作测试集。在进行…

信号处理——时频分析

经典傅里叶变换的限制&#xff1a; 1、只能反映信号的整体特性&#xff1b;&#xff08;完全是时域或频域&#xff09; 2、要求信号满足平稳条件&#xff1b; 3、必须获得时域中的全部信息。 所以引入时频分析&#xff0c;同时使用时间和频率的联合函数来表示信号。 1 时频…

提高数据融合效率和数据成果质量工作流的可行性分析

第一章 引言 本文基于对框架数据、地名地址数据以及变更调查数据为主体数据源的分析&#xff0c;结合数据融合中分层数据处理原则和内容&#xff0c;从数据管理者、数据应用的角度提出数据质量的定位、需求定位&#xff0c;归纳数据融合过程中存在的困难&#xff0c;提出了数据…

嵌入式linux面试题大全及参考答案(3万字长文)

目录 解释Linux内核的主要职责 什么是inode?它在文件系统中扮演什么角色? 常用的5个Linux文件权限标志 查看当前系统运行级别 查找包含特定字符串的文件 使用grep命令过滤特定模式的行 编写脚本检查指定目录下文件大小并排序输出 解释变量、环境变量和位置参数在Shel…

前端npm打包自动压缩

需要插件rollup-plugin-compression 在vite.config中使用 import compresssionBuild from rollup-plugin-compression import type { ICompressionOptions } from rollup-plugin-compression import dayjs from dayjs import packageInfo from ./package.json const option: I…

FANUC喷涂机器人P-350iA电机过热维修解决方案

发那科喷涂机器人作为自动化喷涂生产线的重要组成部分&#xff0c;其性能稳定性和可靠性对于生产效率和产品质量具有重要影响。然而&#xff0c;在实际使用过程中&#xff0c;FANUC喷涂机器人P-350iA电机过热故障问题往往成为影响其正常运行的主要因素之一。 FANUC机器人M-100…

产品经理进阶:供应链管理制度

目录 一、 目的 二、范围 三、意义 五、周期 一、 目的 根据公司战略规划和经营目标,建立和完善生产计划、物料控制体系、库存 管理体系。通过匹配需求和产能,确保在满足市场需求的同时降低整体库存 水平,提高存货周转率,以达成公司的成本管理目标。 二、范围 涉及供应…

vue2的双向绑定

vue是一个mvvm框架&#xff0c;即数据双向绑定&#xff0c;即当数据发生变化的时候&#xff0c;视图也就发生变化&#xff0c;当视图发生变化的时候&#xff0c;数据也会跟着同步变化。 Vue.js 2 中的双向绑定是通过 v-model 指令实现的。v-model 指令可以在表单输入元素上创建…

一款开源免费的现代化风格的Avalonia控件库

前言 Citrus.Avalonia是一款开源&#xff08;MIT License&#xff09;、免费的现代化风格的Avalonia控件库。 Avalonia介绍 Avalonia是一个强大的框架&#xff0c;使开发人员能够使用.NET创建跨平台应用程序。它使用自己的渲染引擎绘制UI控件&#xff0c;确保在Windows、mac…

推荐系统数据集——Amazon-Book

在推荐系统中&#xff0c;像Amazon-Book这样的数据集通常包含用户和物品的交互信息。为了训练模型&#xff0c;这些数据需要转换成适合模型输入的格式。在这种情况下&#xff0c;item_list和user_list需要转换成train.txt文件&#xff0c;通常包含用户ID和物品ID的交互记录。 …

你的生日是星期几?HTML+JavaScript帮你列出来

0 源起 上周末&#xff0c;大宝发现今年自己的生日不是周末&#xff0c;这样就不好约同学和好友一起开生日Party了&#xff0c;很是郁闷。一直嘀咕自己哪年的生日才是周末。 于是我用JavaScript写了一个小程序来帮她测算了未来100年中每年的生日分别是星期几。 1 设计交互界面…

torch创建2d卷积层报错

import torch import torch.nn as nn print(nn.Conv2d(3, 16, 3, padding1)) 编译器:pycharm2023.03.05 python&#xff1a;3.11 运行上述代码 页面报错&#xff1a;OSError: [WinError 126] 找不到指定的模块。 Error loading "D:\apploadpath\pythonPath\Lib\site-…

logback自定义规则脱敏

自定义规则conversionRule public class LogabckMessageConverter extends MessageConverter {Overridepublic String convert(ILoggingEvent event) {String msg event.getMessage();if ("INFO".equals(event.getLevel().toString())) {msg .....脱敏实现}return …

搭建大型分布式服务(四十一)SpringBoot 整合多个kafka数据源-支持亿级消息生产者

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

【ARM】MCU和SOC的区别

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解SOC芯片和MCU芯片的区别 2、 问题场景 用于了解SOC芯片和MCU芯片的区别&#xff0c;内部结构上的区别。 3、软硬件环境 1&#xff09;、软件版本&#xff1a;无 2&#xff09;、电脑环境&#xff1a;无 3&am…

【小学期】安装Navicat,可视化操作数据库

什么是Navicat&#xff0c;如何安装&#xff1f;如何操作&#xff1f; 1. 什么是Navicat&#xff1f; Navicat 是一款功能强大的数据库管理工具&#xff0c;支持多种数据库系统&#xff0c;包括 MySQL、PostgreSQL、SQLite、Oracle、MariaDB 和 SQL Server 等。Navicat 提供了…

Java——枚举

1. 概念 枚举是在JDK1.5之后引入的&#xff0c;主要用途是&#xff1a;将一组常量组织起来&#xff0c;在这之前表示一组常量通常使用定义常量的方式&#xff1a; public static final int RED 1; public static final int GREEN 2; public static final int BLACK 3;但是…

意识与通用人工智能:北京智源大会深度解读

在科技迅猛发展的今天&#xff0c;人工智能&#xff08;AI&#xff09;的意识问题成为了学术界和公众关注的焦点。北京智源大会汇聚了众多学者&#xff0c;围绕意识与通用人工智能&#xff08;AGI&#xff09;的关系进行了深入探讨。本文将对大会的精彩观点进行总结&#xff0c…

clickhouse join内存溢出

clickhouse join 内存溢出 前言排查步骤查看sql统计数据量统计大小优化索引优化字段增加内存最终优化 前言 在一个离线工作流中任务报错 Code: 241. DB::Exception: Received from XXXXXX:9000. DB::Exception: Memory limit (for query) exceeded: would use 20.49 GiB (att…