痛点:单页应用(SPA)首次加载时,所有组件同时请求会导致白屏时间长,用户体验下降。
🔧 解决方案:Vue 3的异步组件
通过 defineAsyncComponent
实现按需加载,显著减少首屏资源体积:
import {
defineAsyncComponent } from 'vue';
const HeavyComponent = defineAsyncComponent(() =>
import('./components/HeavyComponent.vue')
);
🌟 核心优势:
- 性能提升:组件只在路由进入/可见时加载
- 代码拆分:Webpack自动分割独立chunk
- 错误处理:支持加载状态与失败兜底
const HeavyComponent = defineAsyncComponent({ loader: () => import('...'), loadingComponent: Loader, // 加载中组件 errorComponent: ErrorUI, // 错误提示组件 delay: 200, // 延迟显示loading(避免闪烁) });
🚀 最佳实践:
- 结合Vue Router使用
const routes = [ { path: '/dashboard', component: () => import('@/views/Dashboard.vue') // 路由级懒加载 } ];
- 优先懒加载非首屏组件(如弹窗、选项卡页)
- 预加载策略:
webpackPrefetch: true
实测效果:电商项目首屏加载时间减少62%,LCP指标优化41%
💡 思考:懒加载虽好,但需平衡拆分粒度,过度碎片化反而增加请求开销!