013-路由懒加载

1、实现思路

当打包构建应用时,JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就会更加高效。

2、背景

当前,我们使用如下方式导入组件:

import Login from '../views/Login

打包后,这些组件都会被打包到一个js文件中,css 代码会打包到 css 文件中
在这里插入图片描述
访问应用时,就会下载这js文件和对应的css文件
在这里插入图片描述
随着代码的增多,文件的体积也会越来越大。
文件中包含了所有的用户组件的js以及css代码,但用户可能根本不会浏览到某些页面,也就是说根本不需要渲染某些组件,所以vue-router 提供了一种路由懒加载机制,就是当某个路由规则匹配时,才会去加载下载并加载某个组件,此时可以提升首页的渲染速度。

3、实现方案

路由懒加载实现的基础是组件引入方式的变化,需要使用 如下方式引入组件才可以

const Login = () => import('../views/Login')

原来的引入方式

import Login from '../views/Login

对比原来的引入方式,就能发现不同点:现在的 Login 是个函数,当路由规则匹配上,就会执行这个函数,才去加载此组件

{
   path: '/login',
   name: 'login',
   component: Login // 此时的 login 是函数
 },

将所有组件的引入方式都像上面这样修改后,重新打包,由原来的一个js文件拆分成了体积较小的多个js文件
在这里插入图片描述
现在,我们来请求登录页面,请求多个小文件
在这里插入图片描述
此时再访问用户列表页面,会动态加载新的js和css文件,其他页面也都是这种情况
在这里插入图片描述
这种情况,其实是通过增加网络请求次数换取了每次请求包的缩小,可以明显提升首页加载速度。

4、最优解

我们是将每个组件都分别打包了,每个组件都变成单独文件进行请求,并不是最优解,因为网络时延的存在,应将组件合理分包,进行请求,形成最优解。

const UserDetails = () =>
  import(/* webpackChunkName: "group-user" */ './UserDetails.vue')
const UserDashboard = () =>
  import(/* webpackChunkName: "group-user" */ './UserDashboard.vue')
const UserProfileEdit = () =>
  import(/* webpackChunkName: "group-user" */ './UserProfileEdit.vue')

下面修改上面的代码,进行分组打包

// 1、将登录、用户首页模块打包到一组中,组名:login-home
const Login = () =>
  import(/* webpackChunkName: "login-home" */ '../views/Login')
const Home = () =>
  import(/* webpackChunkName: "login-home" */ '../views/Home')

// 2、将用户模块、权限和角色打包到一组中
const Users = () =>
  import(/* webpackChunkName: "user-rights" */ '../views/Users')
const Roles = () =>
  import(/* webpackChunkName: "user-rights" */ '../views/Roles')
const Rights = () =>
  import(/* webpackChunkName: "user-rights" */ '../views/Rights')

// 3、将商品分类、商品参数、商品列表、添加商品打包到一组中
const GoodsList = () =>
  import(/* webpackChunkName: "goods" */ '../views/goods/GoodsList')
const GoodsAdd = () =>
  import(/* webpackChunkName: "goods */ '../views/goods/GoodsAdd')
const Category = () =>
  import(/* webpackChunkName: "goods */ '../views/goods/Category')
const Params = () =>
  import(/* webpackChunkName: "goods */ '../views/goods/Params')

重新打包
在这里插入图片描述
此时,运行程序,打开各个页面,通过网络查看资源的加载情况,如打开用户列表
在这里插入图片描述
访问商品列表
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值