[Lv1] 路由層級優化:三層 Lazy Loading
透過三層路由 Lazy Loading,將首次載入從 12.5MB 降至 850KB,首屏時間縮短 70%。
問題背景(Situation)
專案特性:
- 📦 27+ 個不同的多租戶版型(多租戶架構)
- 📄 每個版型有 20-30 個頁面(首頁、大廳、促銷、代理、新聞等)
- 💾 如果一次載入所有程式碼:首次進入需要下載 10MB+ 的 JS 檔案
- ⏱️ 使用者等待時間超過 10 秒(尤其在手機網路環境下)
優化目標(Task)
- 減少首次載入的 JavaScript 體積(目標:< 1MB)
- 縮短首屏時間(目標:< 3 秒)
- 按需載入(使用者只下載需要的內容)
- 維持開發體驗(不能影響開發效率)
解決方案(Action)
我們採用了三層路由 Lazy Loading 的策略,從「版型」→「頁面」→「權限」三個層級進行優化。
第 1 層:動態模板載入
// src/router/routes.ts
export default async function (siteKey?: string) {
// 根據環境變數動態載入對應的版型路由
const module = await import(`../../template/${siteKey}/router/routes.ts`);
return { routes: module.routes };
}
說明:
- 專案有 27 個版型,但用戶只會使用其中 1 個
- 透過 environment.json 判斷當前是哪個品牌
- 只載入該品牌的路由配置,其他 26 個版型完全不載入
效果:
- 首次載入減少約 85% 的路由配置程式碼