vue路由组件按需加载的几种方法小结


Posted in Javascript onJuly 12, 2018

1. 普通加载

使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如:

import Hello from '@/components/Hello'
import Boy from '@/components/Boy'
import Girl from '@/components/Girl'

这样做的结果就是webpack在npm run build的时候会打包成一个整个的js文件,如果页面一多,会导致这个文件非常大,加载缓慢,为了解决这个问题,需要将他分成多个小文件,而且还要实现异步按需加载,即用到了再加载,而不用一股脑全部加载

2. webpack的require.ensure()实现按需加载

语法:require.ensure(dependencies: String[], callback: function(require), errorCallback: function(error), chunkName: String)

  1. dependencies:字符串构成的数组,声明 callback 回调函数中所需的所有模块,模块作为依赖被加载
  2. callback:只要加载好全部依赖,webpack 就会执行此函数。require 函数的实现,作为参数传入此函数。当程序运行需要依赖时,可以使用 require() 来加载依赖。函数体可以使用此参数,来进一步执行 require() 模块。
  3. errorCallback:当 webpack 加载依赖失败时,会执行此函数。
  4. chunkName:由 require.ensure() 创建出的 chunk 的名字。通过将同一个 chunkName 传递给不同的 require.ensure() 调用,我们可以将它们的代码合并到一个单独的 chunk 中,从而只产生一个浏览器必须加载的 bundle。

使用方法一:

require.ensure([], function(require){
  require('./a.js');
});
// 此时会单独打包出一个js文件,没有自定义名称的话,会被命名为1.js(有hash时候会带上md5)

使用方法二:

require.ensure(['./a.js'], function(require) {
  require('./b.js');
});

1、此时a.js作为依赖被加载,但是没有被执行(官方文档说的only loads the modules)
2、a.js和b.js会被打包成一个文件。
3、回调函数里只require了b.js,只有b.js的内容会被执行。
4、如果你需要使用a.js的内容,需要再加上require('./a.js')

require.ensure(['./list'], function(require){
  var list = require('./list');
  list.show();
});

给require.ensure的第一个参数传了['./list'],执行到这里的时候list.js会被浏览器下载下来,但是并不会执行list.js模块中的代码,也就是webpack官网说的,不会进行evaluate。真正进行evaluate的时候是到了后面这句var list = require('./list');这就是所谓的懒执行。

写在函数中的多个模块会被打包在一起,这一点和上面没有区别。另外,写在数组中的模块也会跟他们打包在一起,不管你有没有手动执行。

vue中使用

comst List = resolve => {
  require.ensure([],() => {
    resolve(require('./list'))
  },'list')
}

其实resolve的作用就是Promise里面那个resolve,在这里就是定义一个异步的组件

使用动态 import语法

const Foo = () => import(/* webpackChunkName: "foo" */ './Foo.vue');
const router = new VueRouter({
 routes: [
  { path: '/foo', component: Foo }
 ]
})
// /* webpackChunkName: "foo" */使用命名chunk,一个特殊的注释语法来提供 chunk name (需要 Webpack > 2.4)
// webpack要加配置 output需要加个chunkFilename
chunkFilename: '[name].js'

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 篱式条件判断
Aug 22 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
Jan 24 Javascript
new Date()问题在ie8下面的处理方法
Jul 31 Javascript
JS对象与json字符串格式转换实例
Oct 28 Javascript
JS访问DOM节点方法详解
Nov 29 Javascript
hovertree插件实现二级树形菜单(简单实用)
Dec 28 Javascript
JS判断一个数是否是水仙花数
Jun 11 Javascript
javascript实现非常简单的小数取整功能示例
Jun 13 Javascript
vue.js实现带日期星期的数字时钟功能示例
Aug 28 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
Dec 02 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
Mar 29 Javascript
Vue实现可移动水平时间轴
Jun 29 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
Jul 12 #jQuery
使用json-server简单完成CRUD模拟后台数据的方法
Jul 12 #Javascript
教你如何用node连接redis的示例代码
Jul 12 #Javascript
angular 内存溢出的问题解决
Jul 12 #Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
Jul 12 #Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
Jul 12 #Javascript
vue中如何实现pdf文件预览的方法
Jul 12 #Javascript
You might like
header()函数使用说明
2006/11/23 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
ASP SQL防注入的方法
2008/12/25 Javascript
Prototype Hash对象 学习
2009/07/19 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
使用webpack4编译并压缩ES6代码的方法示例
2019/04/24 Javascript
python继承和抽象类的实现方法
2015/01/14 Python
Python求解平方根的方法
2015/03/11 Python
python日志logging模块使用方法分析
2019/05/23 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
2019/08/09 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
西尔斯百货官网:Sears
2016/09/06 全球购物
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
英国假发网站:Hothair
2018/02/23 全球购物
Why we need EJB
2016/10/20 面试题
医学生个人求职信范文
2013/09/24 职场文书
秘书行业自我鉴定范文
2013/12/30 职场文书
个人自我剖析材料
2014/02/07 职场文书
少儿励志名言(80句)
2019/08/14 职场文书