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 相关文章推荐
ajax中get和post的说明及使用与区别
Dec 23 Javascript
JQuery中如何传递参数如click(),change()等具体实现
Apr 28 Javascript
jQuery焦点图切换特效插件封装实例
Aug 18 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
Dec 27 Javascript
node.js中的fs.chmod方法使用说明
Dec 18 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
Apr 29 Javascript
AngularJS ng-template寄宿方式用法分析
Nov 07 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
Nov 08 Javascript
微信小程序实现顶部导航特效
Jan 28 Javascript
简单了解JavaScript异步
May 23 Javascript
基于JS实现父组件的请求服务过程解析
Oct 14 Javascript
node解析修改nginx配置文件操作实例分析
Nov 06 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
杏林同学录(二)
2006/10/09 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
php生成HTML文件的类方法
2019/10/11 PHP
javascript 计算两个整数的百分比值
2009/12/26 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
详解Python中的多线程编程
2015/04/09 Python
Python中super函数的用法
2017/11/17 Python
django 将model转换为字典的方法示例
2018/10/16 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
python实现飞机大战小游戏
2019/11/08 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
德国PC硬件网站:CASEKING
2016/10/20 全球购物
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
家长写给老师的建议书
2014/03/13 职场文书
比赛口号大全
2014/06/10 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python