Vue路由懒加载的核心是按需加载组件以优化首屏性能,具体包括:①用() => import()替代静态导入;②通过webpackChunkName分组关联组件;③对核心页面启用webpackPrefetch预加载;④配合Suspense和错误边界提升用户体验。

Vue 路由懒加载的核心,是把组件从“启动时全量加载”变成“访问时按需加载”。这能明显缩短首屏时间、减小初始 JS 包体积,尤其对中大型项目效果显著。
用 () => import() 替换静态导入
这是最基础也最关键的一步。所有原本在路由配置里直接 import 的组件,都要改成函数式动态导入写法:
- ❌ 错误写法:
import Home from '@/views/Home.vue';+component: Home - ✅ 正确写法:
component: () => import('@/views/Home.vue') - Webpack 或 Vite 会自动将该语句识别为代码分割点,生成独立 chunk 文件(如
2.a1b2c3.js) - 浏览器 Network 面板中能看到新 chunk 加载时机与对应路由访问强相关
用 webpackChunkName 合理分组组件
多个功能紧密关联的页面(比如用户中心下的 Profile、Settings、Security),适合打包进同一个 chunk,减少请求数、提升缓存复用率:
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- 写法示例:
component: () => import(/* webpackChunkName: "user" */ '@/views/user/Profile.vue') - 所有同属“user”模块的路由,必须使用完全一致的
webpackChunkName字符串 - 构建后可在
dist目录下看到类似user.abc123.js的文件 - 避免过度分组——一个 chunk 不宜过大(建议 ≤ 200KB gzip 后)
对核心页面启用 prefetch 预加载
高频或登录后必进的页面(如 Dashboard、Home),可提前在浏览器空闲时拉取资源,让跳转更顺滑:
立即学习“前端免费学习笔记(深入)”;
- 写法示例:
component: () => import(/* webpackPrefetch: true */ '@/views/Dashboard.vue') - 该策略不影响当前页面加载优先级,只在空闲时触发
- 不建议对所有路由都加 prefetch,否则可能挤占带宽、干扰关键资源加载
- 也可在导航守卫中手动调用
import()实现更精准的预加载时机控制
配合 Suspense 和错误边界增强体验
异步加载过程中,用户需要明确反馈;加载失败也不能白屏:
- 在路由出口外层包裹
<Suspense>,定义<template #fallback>显示加载态(如骨架屏) - 用
defineAsyncComponent封装非路由异步组件,并设置errorComponent处理加载失败 - 结合
onErrorCaptured或全局错误边界,捕获并上报异步组件加载异常 - 避免让用户面对空白或卡死状态,哪怕只是短暂的 loading 提示,体验也更可控


















