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 相关文章推荐
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
Apr 08 Javascript
javascript获取dom的下一个节点方法
Sep 05 Javascript
jQuery中:selected选择器用法实例
Jan 04 Javascript
在JavaScript中模拟类(class)及类的继承关系
May 20 Javascript
微信小程序 教程之模板
Oct 18 Javascript
微信小程序 五星评价功能的实现
Mar 09 Javascript
react系列从零开始_简单谈谈react
Jul 06 Javascript
javascript自定义事件功能与用法实例分析
Nov 08 Javascript
使用Angular CLI进行Build(构建)和Serve详解
Mar 24 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
Feb 18 Javascript
js实现选项卡效果
Mar 07 Javascript
详解Java中String JSONObject JSONArray List转换
Nov 13 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
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
thinkphp实现附件上传功能
2017/05/26 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
Dom 是什么的详细说明
2010/10/25 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
javascript 作用于作用域链的详解
2017/09/27 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
TensorFlow 多元函数的极值实例
2020/02/10 Python
Python全面分析系统的时域特性和频率域特性
2020/02/26 Python
python计算导数并绘图的实例
2020/02/29 Python
Python中有几个关键字
2020/06/04 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
请解释virtual关键字的含义
2015/06/17 面试题
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
应届毕业生求职信范文分享
2013/12/26 职场文书
党员干部公开承诺书
2014/03/26 职场文书
小学综合实践活动总结
2014/07/07 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
导游词300字
2015/02/13 职场文书
退税申请报告怎么写
2015/05/18 职场文书
辩论赛主持人开场白
2015/05/29 职场文书
升学宴家长答谢词
2015/09/29 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书