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 相关文章推荐
网页常用特效代码整理
Jun 23 Javascript
dojo 之基础篇
Mar 24 Javascript
javascript下高性能字符串连接StringBuffer类
Aug 16 Javascript
基于JQuery制作的产品广告效果
Dec 08 Javascript
javascript实现显示和隐藏div方法汇总
Aug 14 Javascript
javascript实现保留两位小数的多种方法
Dec 18 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
Jan 28 Javascript
使用JavaScript实现链表的数据结构的代码
Aug 02 Javascript
vue和webpack打包项目相对路径修改的方法
Jun 15 Javascript
javascript中可能用得到的全部的排序算法
Mar 05 Javascript
vue项目或网页上实现文字转换成语音播放功能
Jun 09 Javascript
typescript编写微信小程序创建项目的方法
Jan 29 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将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
PHP会话控制实例分析
2016/12/24 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
毕业生自我鉴定
2013/11/05 职场文书
绩效工资分配方案
2014/01/18 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
中式结婚主持词
2014/03/14 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
房屋租赁意向书范本
2015/05/09 职场文书