1. 路由懒加载与 defineAsyncComponent 的代码分割协作
路由懒加载与 defineAsyncComponent 如何协作实现代码分割?两者的分工与取舍是什么?
- 路由级懒加载:component: () => import() 拆分路由页面 chunk
- defineAsyncComponent 的组件级代码分割与状态配置
- 两者叠加时的加载态与错误处理
路由懒加载是路由配置中的 component: () => import('./views/Home.vue'):构建工具把每个路由页面拆分为独立 chunk,导航到该路由时才加载对应代码,实现"按路由分包"的首屏瘦身。defineAsyncComponent 是组件级的异步包装:defineAsyncComponent(() => import('./Heavy.vue')) 把单个组件拆分为 chunk,按需加载,并支持 loadingComponent、errorComponent、delay、timeout、onError 等加载状态配置。二者协作:路由页面内的大组件用 defineAsyncComponent 二次拆分(页面 chunk + 组件 chunk 分层加载),配合 Suspense 统一展示骨架屏;加载失败时分别配置错误兜底(路由守卫/错误页、组件的 errorComponent)。取舍:路由级懒加载是默认首选(粒度合理、无需额外配置);组件级异步加载用于"页面内的大体积低频模块"(编辑器、图表、富文本)或需要精细 loading 控制的场景;注意避免过度拆分(chunk 过多导致请求碎片化),结合 prefetch/preload 策略(路由预取、hover 预加载)平衡首屏与后续体验。
本题考察代码分割的两级粒度:路由级(页面 chunk)与组件级(组件 chunk)及其协作方式。回答时说明各自机制、协作形态(Suspense + loading/error 配置)与拆分策略(避免碎片化、预加载配合),即完整。