Vue Router的懒加载路径的解决方法


Posted in Javascript onJune 21, 2018

单页应用产出的入口chunk大小随着业务的复杂度线性增加,导致后期加载速度越来越慢。后面就需要对不同路径下的模块进行拆分,打包到相应的chunk下,按需加载,找到chunk的大小、个数和页面加载速度的平衡点。

解决办法

.vue模块文件按需加载,其实要做到两件事情:一是标记出这是一个异步组件;二是通知webpack把该组件单独产出为一个chunk。

vue的异步组件

官网给出的异步组件写法:异步组件是一个函数,函数的返回值是一个Promise,只是Promise的resolve函数的参数是常规组件的定义本身。

const AsyncCom = () => Promise.resolve({ /* component definition */ })

webpack异步模块的引入办法

这个对webpack不同的版本来说,用法有点区别:

webpack版本在1-2之间,可以使用require.ensure来告诉webpack引入了一个异步模块

require.ensure([AYNC_MODULE_PATH], CALLBACK, CHUNK_NAME)

其实require.ensure编译后是一个叫_webpack_require_.e的函数,其本身是一个thenable实例,require.ensure的回调放到_webpack_require_.e.then(fn)里面
为了满足以上两个条件

const AsyncCom = resolve => require.ensure([], () => resolve(require(AYNC_MODULE_PATH)), CHUNK_NAME);
webpack>=2的版本可以通过import()来指定动态引入的模块
import('./A.vue') // returns a Promise

Vue Router中的懒加载路径的使用办法

// const A = resolve => require.ensure([], () => resolve(require('./a.vue')), 'A');
const A = () => import('./a.vue')
const router = new VueRouter({
 routes: [
  { path: '/a', component: A }
 ]
})

Tips

组合多个异步模块到一个chunk文件

对不同路径进行按需加载,并不一定非得每个路径产出一个chunk,这个还得按不同的业务和场景进行区分,有时候对于同一个业务下的的小异步模块可以进行合并处理。在webapck版本>2.4时,可以在import引入的时候提供一个/* webpackChunkName: CHUNK_NAME*/注释,来表示chunkname,

const A = () => import(/* webpackChunkName: "group-a-b-c" */ './a.vue')
const B = () => import(/* webpackChunkName: "group-a-b-c" */ './b.vue')
const C = () => import(/* webpackChunkName: "group-a-b-c" */ './c.vue')
// webpack.conf.js
output: {
     ......
    // 使用code-split产出的chunk文件名
    chunkFilename: utils.assetsPath('js/[chunkname].[chunkhash].chunk.js'),
    ......
}

总结

以上所述是小编给大家介绍的Vue Router的懒加载路径的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery 事件执行检测代码
Dec 09 Javascript
js判断一个元素是否为另一个元素的子元素的代码
Mar 21 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
Nov 04 Javascript
js实现幻灯片播放图片示例代码
Nov 07 Javascript
JS获取单击按钮单元格所在行的信息
Jun 17 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
Dec 18 Javascript
BootStrap实现树形目录组件代码详解
Jun 21 Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 Javascript
underscore之function_动力节点Java学院整理
Jul 11 Javascript
node.js express中app.param的用法详解
Jul 16 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
Mar 06 Javascript
vue-router的两种模式的区别
May 30 Javascript
详解如何使用webpack打包JS
Jun 21 #Javascript
vue自定义一个v-model的实现代码
Jun 21 #Javascript
JS实现模糊查询带下拉匹配效果
Jun 21 #Javascript
浅析Vue 生命周期
Jun 21 #Javascript
vue数组对象排序的实现代码
Jun 20 #Javascript
vue项目实现github在线预览功能
Jun 20 #Javascript
node thread.sleep实现示例
Jun 20 #Javascript
You might like
php文件上传表单摘自drupal的代码
2011/02/15 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
php实现socket推送技术的示例
2017/12/20 PHP
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
一览画面点击复选框后获取多个id值的方法
2016/05/30 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
socket + select 完成伪并发操作的实例
2017/08/15 Python
python如何统计序列中元素
2020/07/31 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
python 平衡二叉树实现代码示例
2018/07/07 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
CSS3 选择器 伪类选择器介绍
2012/01/21 HTML / CSS
美发活动策划书
2014/01/14 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python
Java 超详细讲解hashCode方法
2022/04/07 Java/Android
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技