路由懒加载配合prefetch预加载的核心是“按需加载+提前准备”,即用import()实现异步拆包,对高转化率路由(如登录后首页、列表页详情页)添加prefetch标记,由构建工具自动注入link标签,在空闲时低优先级下载,提升用户感知速度。

路由懒加载配合 Prefetch 预加载,核心是“按需加载 + 提前准备”,不是全量预载,也不是完全惰性。关键在判断用户行为路径,把「很可能马上要访问」的模块提前拉取,但不阻塞首屏,也不浪费带宽。
懒加载是基础:用 import() 替代静态 import
确保每个异步路由都通过动态 import() 定义,这是 Webpack/Vite 自动识别并拆包的前提:
- ❌ 错误写法:
component: Home(静态引用,打包进主包) - ✅ 正确写法:
component: () => import('@/views/Home.vue') - 进阶技巧:给动态导入加
webpackChunkName注释,方便调试和缓存管理:import(/* webpackChunkName: "home" */ '@/views/Home.vue')
Prefetch 是策略:只对高转化率路由开启
Prefetch 不是越多越好。它会在空闲时下载资源,但会占用后台带宽、影响其他请求优先级。推荐仅用于用户行为明确、跳转概率 >60% 的场景,例如:
- 登录页 → 首页(用户登录成功后几乎必跳)
- 列表页 → 详情页(点击“查看详情”按钮前,hover 或聚焦时触发)
- 导航菜单中「我的订单」「购物车」等高频二级入口
Vue Router 中开启方式(以 Vue 3 + Router 4 为例):
{
path: '/order',
component: () => import('@/views/Order.vue'),
meta: { prefetch: true } // 自定义标记
}
再配合全局前置守卫或自定义指令,在合适时机调用 import('@/views/Order.vue').then(...) 触发 prefetch —— 实际无需手动 fetch,现代构建工具(Vite/Webpack)已支持 /* webpackPrefetch: true */ 或 /* vitePrefetch: true */ 注释自动注入 link 标签。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
更精细的控制:用 preload 和 prefetch 区分优先级
两者都生成 <link rel="...">,但语义和调度策略不同:
-
preload:当前导航**强依赖**的资源(如首屏关键字体、核心组件),浏览器会以最高优先级下载;
写法:import(/* webpackPreload: true */ '@/components/Chart.vue') -
prefetch:后续导航**可能用到**的资源(如「设置页」「帮助中心」),浏览器在空闲时低优先级下载;
写法:import(/* webpackPrefetch: true */ '@/views/Settings.vue')
混淆使用会导致首屏变慢(preload 错用)或预加载失效(prefetch 乱开)。简单口诀:「现在就要用」选 preload,「后面大概率点」选 prefetch。
监控与验证:别信配置,要看 network
上线前务必打开 DevTools → Network,过滤 JS,观察:
- 是否出现
initiator: <em>Other</em>的 chunk?说明 prefetch 已生效 - 首屏 JS 总大小是否下降?懒加载是否真正分离了非首屏代码?
- 切换路由时,目标 chunk 是否从内存或 HTTP 缓存直接加载?而非重新发起请求?
补充建议:结合 performance.mark() + performance.measure() 记录「从点击到组件 mounted」耗时,对比开启前后数据,比看 bundle 分析更真实。
不复杂但容易忽略:Prefetch 的价值不在“快”,而在“感知快”。用户点按钮的 200ms 空档期,刚好完成下一个页面的 JS 下载,点击即渲染——这才是体验提升的本质。










