微前端框架是為了解決項目應用在大型項目中帶來的復雜性和維護難題而提出的技術方案。

微前端框架是為了解決單頁應用(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.pswp.cn/diannao/36112.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36112.shtml
英文地址,請注明出處:http://en.pswp.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…