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 相关文章推荐
js+css在交互上的应用
Jul 18 Javascript
JavaScript学习笔记之数组的增、删、改、查
Mar 23 Javascript
PassWord输入框代码分享
Jun 07 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
Dec 13 Javascript
详解webpack进阶之loader篇
Aug 23 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
Sep 21 Javascript
js根据json数据中的某一个属性来给数据分组的方法
Oct 08 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
Feb 28 Javascript
JS使用数组实现的队列功能示例
Mar 04 Javascript
微信小程序canvas分享海报功能
Oct 31 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
May 08 Javascript
JavaScript设计模式之原型模式详情
Jun 21 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安全配置详细说明
2011/09/26 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
javascript常见用法总结
2014/05/22 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
js实现3D旋转相册
2020/08/02 Javascript
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
利用信号如何监控Django模型对象字段值的变化详解
2017/11/27 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
python中update的基本使用方法详解
2019/07/17 Python
python模块如何查看
2020/06/16 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
linux面试题参考答案(10)
2013/11/04 面试题
门卫班长岗位职责
2013/12/15 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
会计专业求职信
2014/08/10 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
首次购房证明
2015/06/19 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
什么是clearfix (一文搞清楚css清除浮动clearfix)
2023/05/21 HTML / CSS