vue路由懒加载方式

文章类型:Vue

发布者:hp

发布时间:2025-05-04

一:引言

在使用vue中,我们需要对路由进行动态加载,避免一次性全部加载导致页面卡顿,那么,怎么实现呢?

二:方式

(1)动态import()

   定义:通过 ES6 动态导入语法触发 Webpack 代码分割,按需加载路由组件

   优势:代码简洁,持 Webpack 自动生成独立 chunk 文件‌

   参数:webpackChunkName:自定义 chunk 文件名‌/webpackPrefetch: true:预加载资源(浏览器空闲时加载)‌

   代码:

// 路由配置示例
const routes = [
  {
    path: '/home',
    component: () => import(/* webpackChunkName: "home" */ '@/views/Home.vue')
  }
];

(2)Vue异步组件

   定义:使用 Vue 的异步组件工厂函数实现懒加载,适用于旧版 Vue 或非 Webpack 环境

   特点:需手动处理加载状态(如加载中/失败组件)‌

   代码:

 const Home = resolve => require(['@/views/Home.vue'], resolve);
const routes = [{ path: '/home', component: Home }];

(3)Webpack(require.ensure)

   定义:旧版 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')