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 事件记录使用说明
Oct 20 Javascript
document.getElementById介绍
Sep 13 Javascript
三种方式获取XMLHttpRequest对象
Apr 21 Javascript
JavaScript实现拖拽网页内元素的方法
Apr 15 Javascript
理解JS绑定事件
Jan 19 Javascript
Bootstrap布局组件应用实例讲解
Feb 17 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
Sep 18 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
Dec 13 Javascript
ionic2 tabs 图标自定义实例
Mar 08 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
Jul 13 Javascript
简单使用webpack打包文件的实现
Oct 29 Javascript
JS实现随机抽选获奖者
Nov 07 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
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
js正确获取元素样式详解
2009/08/07 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
canvas学习之API整理笔记(二)
2016/12/29 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
Python图像处理之简单画板实现方法示例
2018/08/30 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
师范生教师实习自我鉴定
2013/09/27 职场文书
前台接待岗位职责
2013/12/03 职场文书
委托书范文
2014/04/02 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫
MySQL transaction事务安全示例讲解
2022/06/21 MySQL