[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% 的路由配置代码