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 相关文章推荐
php跨域调用json的例子
Nov 13 Javascript
javascript简单实现图片预加载
Dec 03 Javascript
浅谈JavaScript函数节流
Dec 09 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
Jun 21 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
Aug 05 Javascript
BootStrap入门教程(三)之响应式原理
Sep 19 Javascript
jquery UI Datepicker时间控件冲突问题解决
Dec 16 Javascript
bootstrap下拉菜单使用方法解析
Jan 13 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
Oct 11 Javascript
bootstrap Table的一些小操作
Nov 01 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
Feb 11 Javascript
vue 组件内获取actions的response方式
Nov 08 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
本地计算机无法启动Apache故障处理
2014/08/08 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
php把数组值转换成键的方法
2015/07/13 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
jquery 新浪网易的评论块制作
2010/07/01 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
Bootstrap列表组学习使用
2017/02/09 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
多个python文件调用logging模块报错误
2020/02/12 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
python Zmail模块简介与使用示例
2020/12/19 Python
JPA的特点
2014/10/25 面试题
毕业生找工作的自我评价
2013/10/18 职场文书
优秀高中生事迹材料
2014/02/11 职场文书
幼儿教师工作感言
2014/02/14 职场文书
市场策划求职信
2014/08/07 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
工作一年自我鉴定
2019/06/20 职场文书