vue路由懒加载

摘要:
结合Vue的异步组件和webpack的codesplittingfeature,轻松实现路由组件的懒加载。只需要给chunk命名,提供require.ensure第三个参数作为chunk的名称:constFoo=r=˃require.ensureconstBar=r=˃require.ensureconstBaz=r=˃require.ensureWebpack将相同chunk下的所有异步模块打包到一个异步块里面--这也意味着我们无须明确列表require.ensure的依懒懒加载的目的其实就是为了减少单个js文件的大小,如果所有文件都打包到bundle.js的话,会是一个非常庞大的js文件,而且随着项目内容的变多,这个文件也会越来越大,使用懒加载就可以将文件分割成不同的.js文件,实现按需加载!

当打包构建应用时,javascript包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。

结合Vue的异步组件和webpack的code splitting feature,轻松实现路由组件的懒加载。

我们要做的就是把路由对应的组件定义成异步组件:

const Foo = resolve =>{
    //require.ensure 是webpack的特殊语法,用来设置code-split point
    //代码分块
    require.ensure(['./Foo.vue'], () =>{
        resolve(require('./Foo.vue'))
    })
}

还有另外一种代码分块的语法,使用AMD风格的require,更为简单:

const Foo = resolve => require(['./Foo.vue'], resolve)

只是引入模块的方式由原来的 import Foo from './Foo' 改变成了如上的方式,这样就可以根据不同路由来加载不同的模块了,不需要改变任何路由配置,跟之前一样使用Foo:

const router = newVueRouter({
    routes: [
        { path: '/foo', component: Foo }
    ]
})

实际项目中一般一个路由下会有多个组件,或者组件下有多个子组件,这里就需要把组件按组分块了。

把某个路由下的所有组件都打包在同个异步chunk中。只需要给chunk命名,提供require.ensure第三个参数作为chunk的名称:

const Foo = r => require.ensure([], () => r(require('./Foo.vue')), 'group-foo')
const Bar = r => require.ensure([], () => r(require('./Bar.vue')), 'group-foo')
const Baz = r => require.ensure([], () => r(require('./Baz.vue')), 'group-foo')

Webpack将相同chunk下的所有异步模块打包到一个异步块里面 -- 这也意味着我们无须明确列表require.ensure的依懒(传空数组就行)

懒加载的目的其实就是为了减少单个js文件的大小,如果所有文件都打包到bundle.js的话,会是一个非常庞大的js文件,而且随着项目内容的变多,这个文件也会越来越大,使用懒加载就可以将文件分割成不同的.js文件,实现按需加载!

requre.ensure()的坑点

.空数组作为参数

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

以上代码保证了拆分点被创建,而且a.js被webpack分开打包,不会打到主文件中。

.依懒作为参数

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

上面的代码,a.js 和 b.js 会被打包到一起,而且从主文件束中拆分出来。但只有b.js的内容被执行。a.js的内容仅仅是可以被使用,但并没有被输出。

想去执行a.js,我们需要异步的引用它,如require('./a.js'),让它的javascript被执行。第三个参数的意义就是把chunk名相同的文件打包到一起!

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

如上所示,就可以实现a.js 和 b.js打包在一起,a.js的内容也能被执行!

免责声明:文章转载自《vue路由懒加载》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ubuntu永久修改主机名iOS敏捷开发之道,经常使用的宏定义总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Vue 简单实例 购物车4

1、查看代码发现选中全选是由 check 样式控制的,所以我们要添加一个变量来控制是否全选: <span :class="['checkbox-btn', 'item-check-btn', allCheck ? 'check' : '']"> <script>export default{ data() { retu...

代理ARP的总结

ARP/代理ARP的总结1.ARP首先讲到ARP,ARP是地址解析协议,它的作用是在以太网环境下,通过3层的IP地址来找寻2层的MAC地址,得到一张ARP缓存表。转发数据的时候根据ARP缓存表来进行传输。下图详细说明数据传输时ARP是如何一步步操作的。在配置IP地址后,不做任何ping操作,ARP缓存表是这样的: 当PC去ping R1的时候,你会发现第...

基于SpringBoot和Vue的企业级中后台开源项目

简介 SmartAdmin由河南·洛阳 1024创新实验室团队研发的一套互联网企业级的通用型中后台解决方案!使用最前沿的前后台技术栈SpringBoot和Vue,前后端分离,我们开源一套漂亮的代码和一套整洁的代码规范,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少加班,快乐工作,热爱生活。SmartAdmin 让你...

彻底搞懂Spring类加载(注解方式)

单例预加载默认 单例懒加载   正确的加载时机   错误的加载时机 多例懒加载仅支持懒加载 spring beanfactory类高级用法   反射方式加载类 需要注意的问题 通过 Spring 注册的类一共只有三种加载方式! 环境:spring-context 4.2.6jdk 8Eclipse 4.7 最简单的配置 <?xml ve...

图片懒加载与预加载

预加载 常用的是new Image();,设置其src来实现预载,再使用onload方法回调预载完成事件。 functionloadImage(url, callback) {   var img = new Image(); //创建一个Image对象,实现图片的预下载   img.src =url;   if(img.complete)   { //如...

Vue学习之vue-cli脚手架下载安装及配置

Vue学习之vue-cli脚手架下载安装及配置:https://www.cnblogs.com/clschao/articles/10650862.html   1. 先下载node.js,下载地址:https://nodejs.org/en/download/           找个目录保存,解压下载的文件,然后配置环境变量,将下面的路径配置到环境变量...