vue路由懒加载方式
文章类型:Vue
发布者:hp
发布时间:2025-05-04
在使用vue中,我们需要对路由进行动态加载,避免一次性全部加载导致页面卡顿,那么,怎么实现呢?
定义:通过 ES6 动态导入语法触发 Webpack 代码分割,按需加载路由组件
优势:代码简洁,持 Webpack 自动生成独立 chunk 文件
参数:webpackChunkName:自定义 chunk 文件名/webpackPrefetch: true:预加载资源(浏览器空闲时加载)
代码:
// 路由配置示例
const routes = [
{
path: '/home',
component: () => import(/* webpackChunkName: "home" */ '@/views/Home.vue')
}
];
定义:使用 Vue 的异步组件工厂函数实现懒加载,适用于旧版 Vue 或非 Webpack 环境
特点:需手动处理加载状态(如加载中/失败组件)
代码:
const Home = resolve => require(['@/views/Home.vue'], resolve);
const routes = [{ path: '/home', component: Home }];
定义:旧版 Webpack 的代码分割语法
场景:需兼容 Webpack 1-2 的项目
代码:
const Home = resolve => require.ensure([], () => resolve(require('@/views/Home.vue')), 'home');
1:预加载与预取
webpackPrefetch 预取:提前加载非关键路由资源(如后台管理页面)
webpackPreload 预加载:高优先级加载关键资源(如首屏依赖模块)
component: () => import(/* webpackPrefetch: true */ './AdminPanel.vue')
2:统一chunk命名
通过 webpackChunkName 合并同类路由 chunk,减少 HTTP 请求数
// 相同 chunkName 的路由合并为 home.[hash].js
() => import(/* webpackChunkName: "home" */ './Home.vue')
() => import(/* webpackChunkName: "home" */ './HomeDetail.vue')
3:按功能模块拆分
将关联路由划分到同一 chunk,提升缓存利用率
// 用户模块相关路由
() => import(/* webpackChunkName: "user" */ './UserProfile.vue')
() => import(/* webpackChunkName: "user" */ './UserSettings.vue')