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 相关文章推荐
IE和firefox浏览器的event事件兼容性汇总
Dec 06 Javascript
JQuery判断子iframe何时加载完成解决方案
Aug 20 Javascript
使用jQuery操作HTML的table表格的实例解析
Mar 13 Javascript
js对象浅拷贝和深拷贝详解
Sep 05 Javascript
基于AngularJS实现iOS8自带的计算器
Sep 12 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
Oct 21 Javascript
Bootstrap fileinput组件封装及使用详解
Mar 10 Javascript
JavaScript中最常用的10种代码简写技巧总结
Jun 28 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
Dec 10 Javascript
详解如何使用node.js的开发框架express创建一个web应用
Dec 20 Javascript
javascrit中undefined和null的区别详解
Apr 07 Javascript
原生js实现点击轮播切换图片
Feb 11 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
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
详解Vue-cli代理解决跨域问题
2017/09/27 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
解决django FileFIELD的编码问题
2020/03/30 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
介绍一下Python下range()函数的用法
2013/11/07 面试题
环保建议书600字
2014/05/14 职场文书
特教教师先进事迹
2014/05/21 职场文书
出生医学证明书
2014/09/15 职场文书
公司财务会计主管应聘求职信
2014/09/26 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
教师党员承诺书2015
2015/01/21 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
cf战队宣传语
2015/07/13 职场文书
创业计划书之物流运送
2019/09/17 职场文书
详解Python牛顿插值法
2021/05/11 Python