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 相关文章推荐
javascript下利用arguments实现string.format函数
Aug 24 Javascript
javascript禁用键盘功能键让右击及其他键无效
Oct 09 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
Jun 20 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
Jun 19 Javascript
js实现表单Radio切换效果的方法
Aug 17 Javascript
跟我学习javascript的arguments对象
Nov 16 Javascript
AngularJS转换响应内容
Jan 27 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
Mar 04 Javascript
angular实现IM聊天图片发送实例
May 08 Javascript
JavaScript事件对象event用法分析
Jul 27 Javascript
Javascript异步执行不按顺序解决方案
Apr 30 Javascript
el-table-column 内容不自动换行的解决方法
Aug 14 Vue.js
详解如何使用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 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
js函数的延迟加载实现代码
2012/10/11 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
python实现发送邮件功能代码
2017/12/14 Python
10个Python小技巧你值得拥有
2018/09/29 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
2020/03/05 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
Python实现EM算法实例代码
2020/10/04 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
GWT都有什么特性
2016/12/02 面试题
三个儿子教学反思
2014/02/03 职场文书
农村文化建设标语
2014/10/07 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL