前端菜單權限方案

方案一:前端全量配置路由表 + 后端返回權限碼

思路

  • 所有可能的路由都在前端 router 中靜態配置好(就像你現在這樣)。

  • 登錄后,后端返回當前用戶的菜單權限(通常是一個權限 code 列表)。

  • 前端根據權限碼過濾掉無權訪問的路由,生成最終的可訪問菜單。

優點

  • 路由結構清晰,開發時有完整的路由提示和類型支持。

  • 不依賴后端返回路由結構,前端可獨立開發和調試。

  • 性能好,減少一次菜單結構的接口解析。

缺點

  • 每次新增菜單都需要前端改代碼并發版。

  • 如果菜單結構變化頻繁,前端維護成本高。

方案二:后端返回菜單/路由結構,前端動態生成路由

思路

  • 登錄后,后端直接返回當前用戶可訪問的菜單樹(包含 pathcomponentmeta 等信息)。

  • 前端用 router.addRoute() 動態注冊路由。

  • 菜單渲染直接用后端返回的數據。

優點

  • 菜單和權限完全由后端控制,前端無需改代碼即可調整菜單結構。

  • 多端(Web、App、小程序)可共用一套菜單權限數據。

缺點

  • 前端需要做動態組件加載(import()),并處理找不到組件的情況。

  • 路由類型提示和 IDE 自動補全會缺失。

  • 如果后端返回的路由數據有誤,前端可能直接掛掉。

建議

  • 如果你的系統菜單變化不頻繁(比如 ERP、后臺管理系統),推薦方案一: 前端全量配置路由,后端只返回權限碼,前端過濾展示。 這樣開發體驗好,調試方便,出錯率低。

  • 如果你的系統菜單變化頻繁(比如 SaaS 平臺,不同客戶菜單差異大),推薦方案二: 后端返回菜單樹,前端動態注冊路由,真正做到菜單和權限后端可配。

混合方案(很多企業在用)

  • 前端維護一個路由組件映射表pathcomponent)。

  • 后端返回菜單結構(只包含 pathmeta 等),前端用映射表找到對應組件并動態注冊。

  • 這樣既能后端控制菜單,又能保證組件路徑可控。

// 路由組件映射表
const componentMap = {'dashboard': () => import('@/views/Dashboard/index.vue'),'system/user': () => import('@/views/System/User.vue'),// ...
}// 動態注冊
menus.forEach(menu => {router.addRoute('Layout', {path: menu.path,name: menu.name,component: componentMap[menu.component]})
})

方案一和方案二速度上性能比較

性能對比

對比項方案一:前端全量配置 + 權限過濾方案二:后端返回菜單/路由結構
首屏速度較快。路由表已經在打包時編譯進前端代碼,進入系統時只需拿到權限碼做一次本地過濾即可。稍慢。登錄后需要額外請求菜單數據,再根據數據動態注冊路由,才能進入頁面。
網絡請求登錄接口 + 權限接口(可合并),不需要額外的菜單結構接口。登錄接口 + 菜單接口(必需),多一次網絡往返。
渲染延遲幾乎無延遲,過濾完成即可渲染。需要等菜單接口返回并處理完動態路由后才能渲染。
打包體積稍大(包含所有路由組件),但可配合懶加載減少首屏體積。可能稍小(只加載基礎路由),但動態加載組件時會有額外延遲。

總結

  • 速度優先 → 方案一更快,因為路由表和組件都已經在前端準備好,進入系統時只做一次本地過濾。

  • 靈活性優先 → 方案二更靈活,菜單結構改動不需要前端發版,但首屏會慢一點。

為什么混合方案比方案二能提升速度那?

組件路徑提前確定,避免運行時查找失敗

  • 方案二:后端返回的 component 通常是字符串(如 "system/user"),前端需要在運行時用 import() 去拼接路徑并加載,這個過程會觸發 Webpack 的動態模塊查找,范圍大時會生成一個很大的動態 chunk map,解析和匹配都要時間。

  • 混合方案:前端事先維護一個 componentMapkey → import函數),直接用 componentMap[menu.component] 獲取組件加載函數,跳過了運行時路徑匹配,Webpack 只打包實際用到的模塊,按需加載更快。

路由注冊邏輯更輕量

  • 方案二:后端返回的菜單數據需要先做一輪“數據清洗 + 動態 import + 異步注冊”,這一步必須等接口返回后才能開始。

  • 混合方案:后端只返回菜單結構(不含復雜組件路徑解析),前端拿到數據后直接用映射表匹配組件并注冊,省去了動態路徑解析的耗時。

首屏渲染提前啟動

  • 方案二:首屏必須等菜單接口返回 + 動態 import 完成后才能渲染主框架。

  • 混合方案:因為組件映射表在打包時就存在,首屏可以先渲染 Layout 框架,菜單接口返回后再補充路由,不會阻塞主框架渲染。

打包優化更好

  • 方案二:動態路徑 import 可能導致 Webpack 打包出一個大而全的 chunk(因為它無法靜態分析具體會用到哪些組件)。

  • 混合方案:映射表是靜態的,Webpack 能精確分割 chunk,按需加載,減少首屏下載體積。

總結

混合方案的提速點在于:

  • 路徑解析提前到編譯期,減少運行時動態匹配

  • 組件按需打包,避免大 chunk

  • 首屏可并行渲染,減少等待時間

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98885.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98885.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98885.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring項目部署后為什么會生成 logback-spring.xml文件

以下內容為豆包生成,此處僅做記錄在 Spring 項目(尤其是 Spring Boot 項目)部署后生成 logback-spring.xml 文件,通常有以下幾種原因:1. 項目打包時主動包含了該文件logback-spring.xml 是 Logback 日志框架在 Spring …

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘vaex’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘vaex’問題 摘要 在Python開發過程中,使用pip install時遇到錯誤是非常常見的情況。特別是在使用PyCharm等集成開發環境(IDE&#xff0…

實習總結——關于聯調解決的因CRC校驗導致協議交互失敗的調試經驗總結

1.場景還原:在我開發USB PD測試模塊時,發現待測主板始終不回復Request消息,導致我的測試失敗;此時我的任務就是快速定位這個協議交互失敗的原因,無論是軟件、硬件還是協同。2.大致的調試步驟:1.首先使用了邏…

STM32之RTC

RTC簡介 實時時鐘(Real Time Clock,RTC),本質是一個計數器,計數頻率常為秒,專門用來記錄時間。 普通定時器拿來作時鐘可行嗎?普通定時器無法掉電運行! RTC特性: 1,能提供時間&…

【OC】單例模式

文章目錄前言概念優缺點優點缺點兩種使用模式懶漢模式實現代碼運行結果餓漢模式實現代碼運行結果在自定義類方法時的幾種常見寫法總結前言 在之前我們已經學習過單例模式的有關內容,但是只是最簡單的單例,無法勝任多線程或者稍微多一點的情況便無法確定…

機器學習(七)決策樹-分類

一 概念1 決策節點通過條件判斷而進行分支選擇的節點。將樣本的屬性值,也就是特征值與決策節點上的值進行比較,從而判斷它的流向。2 葉子節點沒有子節點的節點,表示最終的決策結果。3 決策樹的深度所有節點的最大層次數決策樹具有一定的層次結…

IT 服務管理的新格局:從工單系統到一體化 ITSM 平臺

企業 IT 部門的角色轉變在過去,IT 部門更多被視為“技術支持”,主要負責設備維護和故障處理。但隨著數字化轉型加速,IT 已經成為業務連續性和創新的重要推動力。從客戶體驗到數據安全,從業務敏捷到成本控制,IT 服務管理…

創建一個Spring Boot Starter風格的Basic認證SDK

文章目錄前言設計思路SDK實現步驟1. 創建SDK Maven項目(sdk目錄)2. 實現配置類3. 實現認證邏輯4. 實現攔截器5. 實現自動配置6. 創建spring.factories文件使用方集成步驟1. 引入SDK依賴2. 配置Application屬性3. 創建測試接口4. 測試接口訪問SDK擴展功能…

mybatis處理統計sql進度丟失問題

如何處理統計sql進度丟失 SELECT sum(decimal_column) AS sum_value FROM your_table如上sql執行時沒有問題,在數據庫可視工具可以正常顯示,但是在mybatis執行時,卻出現解決辦法 使用轉 decimal 控制精度 SELECT CAST(SUM(decimal_column) A…

全球首款!科聰控制器獲德國 TüV 萊茵功能安全認證

近日,浙江科聰控制技術有限公司(以下簡稱"科聰")的安全移動機器人控制器MSC5000榮獲全球權威認證機構德國萊茵TV集團(TV Rheinland)頒發的功能安全認證證書。這款控制器是全球首款通過SIL3、PLe 認證的移動機…

pureadmin的動態路由和靜態路由

在 PureAdmin(基于 Vue3 的后臺管理框架)中,靜態路由和動態路由是實現路由管理的兩種方式,主要區別在于路由的定義時機、加載方式和靈活性,具體區別如下: 1. 靜態路由 定義方式:路由規則在代碼中…

第3章:CPU實戰

1. Linux操作系統CPU平均負載 以前我們總認為CPU使用率和CPU平均負載是一樣的,負載高了就是CPU使用率提高。但是到底是什么情況呢? 1.1. CPU的平均負載 單位時間內 系統處于 可運行狀態 和不可中斷狀態 的平均進程數,就是平均活躍進程數&a…

【Vue3】06-利用setup編寫vue(1)

其它篇章: 1.【Vue3】01-創建Vue3工程 2.【Vue3】02-Vue3工程目錄分析 3.【Vue3】03-編寫app組件——src 4.【Vue3】04-編寫vue實現一個簡單效果 5.【Vue3】05-Options API和Composition API的區別 6.【Vue3】06-利用setup編寫vue(1) 7.【Vue…

UDS NRC速查

目錄 NRC 一、通用NRC(0x10~0x5F) 二、數據相關NRC(0x70~0x8F) 三、會話與狀態NRC 注意事項 UDS中的NRC(Negative Response Code)即否定響應碼,用于在診斷通信中表示服務端無法成功執行客戶端請求的原因。以下是一些常用的UDS NRC碼及其含義: HEX Name Description 01 …

【AI論文】多模態大型語言模型的視覺表征對齊

摘要:通過視覺指令微調訓練的多模態大型語言模型(MLLMs)在各類任務中均取得了優異表現,然而在以視覺為中心的任務(如物體計數或空間推理)中,其性能仍存在局限。我們將這一差距歸因于當前主流的純…

SKywalking Agent配置+Oracle監控插件安裝指南

SKywalking Agent配置Oracle監控插件安裝指南前言: SkyWalking Elasticsearch8 容器化部署指南 Skywalking版本:V10.2.0 Skywalking Agent版本:V9.4.0 Skywalking Agent下載地址:Downloads | Apache SkyWalking 插件下載地址&…

ES相關問題匯總

問題一:關于【QueryBuilder對象】和【Query String語法】查詢時底層運行方式和結果的差異

5. STM32 時鐘系統分配

文章目錄下述將以stm32f407 為例1. 時鐘系統及頻率分析2. 時鐘配置下述將以stm32f407 為例 1. 時鐘系統及頻率分析 上述STM32F4時鐘系統圖解析入下: STM32F407 系列微控制器(基于 Cortex-M4 內核,帶 FPU)的工作頻率配置如下&…

《從 0 建立測試開發認知:先搞懂 “是什么”,再學 “怎么做”》

🔥個人主頁:草莓熊Lotso 🎬作者簡介:C研發方向學習者 📖個人專欄: 《C知識分享》《Linux 入門到實踐:零基礎也能懂》《數據結構與算法》《測試開發實戰指南》《算法題闖關指南》 ??人生格言&a…

net::ERR_EMPTY_RESPONSE

net::ERR_EMPTY_RESPONSE表現解決表現 Java后端封裝一個接口,透傳前端參數,請求到其他模塊服務 本地開發環境聯調時是沒有問題,測試環境上報錯 1.前端報錯,F12檢查,network上的請求,返回response選項中為空…