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图片上下tab切换效果
Mar 18 Javascript
JS获取IP、MAC和主机名的五种方法
Nov 14 Javascript
javascript实现类似超链接的效果
Dec 26 Javascript
jQuery和AngularJS的区别浅析
Jan 29 Javascript
jquery实现的伪分页效果代码
Oct 29 Javascript
Bootstrap布局组件应用实例讲解
Feb 17 Javascript
分享自己用JS做的扫雷小游戏
Feb 17 Javascript
微信小程序 教程之WXML
Oct 18 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
Jul 04 Javascript
关于vue中 $emit的用法详解
Apr 12 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
Dec 30 Javascript
SpringBoot在yml配置文件中配置druid的操作
Nov 16 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
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
php中的动态调用实例分析
2015/01/07 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
js 获取扫码枪输入数据的方法
2020/06/10 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
python模拟Django框架实例
2016/05/17 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
Python进度条的制作代码实例
2019/08/31 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
关于毕业的中学校园广播稿
2014/01/26 职场文书
竞争性谈判邀请书
2014/02/06 职场文书
演讲稿格式
2014/04/30 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
本科应届生求职信
2014/08/05 职场文书
毕业生实习证明
2014/09/19 职场文书
2015中学政教处工作总结
2015/07/22 职场文书