vue路由懒加载

当打包构建应用时,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 = new VueRouter({
    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的内容也能被执行!

时间: 2024-10-07 06:02:09

vue路由懒加载的相关文章

vue 路由懒加载

题外: 我司目前的后台管理网站依旧是 jq + xxUI 构成的 ,早就想把 丫儿 个换成 vue了, 苦于整个组几乎一致处于一个忙碌的状态,没有时间来重构. 然鹅,昨天今天组长找到我说要用 vue 搞起来,这个问题不大,毕竟之前用他完成了几个项目,颇有收获,教训满满. 看着 左侧 冗长菜单 item ,不禁陷入了沉思. 当打包构建应用时,Javascript 包会变得非常大,首次加载即便使用了 各种 LOADING ,各种 动画,肯定体验贼差, 如果我们能把不同路由对应的组件分割成不同的代码块

vue路由懒加载及组件懒加载

vue路由懒加载及组件懒加载: https://www.cnblogs.com/-roc/p/9983177.html 一.为什么要使用路由懒加载 为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题. 二.定义 懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载. 三.使用 常用的懒加载方式有两种:即使用vue异步组件 和 ES中的import 1.未用懒加载,vue中路由代码如下 import Vue from 'vue' import Router from 'v

【凡尘】---vue路由懒加载---【vue】

一.懒加载 也叫延迟加载或者按需加载,即在需要的时候进行加载,   二.为什么要使用懒加载 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,时间过长,会出啊先长时间的白屏,即使做了loading也是不利于用户体验,而运用懒加载则可以将页面进行划分,需要的时候加载页面,可以有效的分担首页所承担的加载压力,减少首页加载用时 简单的说就是:进入首页不用一次加载过多资源造成用时过长 三.非懒加载的路由配置项 四.vue异步组件实

vue+element ui项目总结点(一)select、Cascader级联选择器、encodeURI、decodeURI转码解码、一级mockjs用法、路由懒加载三种方式

不多说上代码: <template> <div class="hello"> <h1>{{ msg }}</h1> <p>Element UI简单Cascader级联选择器使用</p> <el-cascader :options='options' v-model="selectedOptions" @change="handleChange"> </el-

vue项目实现路由按需加载(路由懒加载)的3种方式

为什么需要懒加载? 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,时间过长,会出啊先长时间的白屏,即使做了loading也是不利于用户体验,而运用懒加载则可以将页面进行划分,需要的时候加载页面,可以有效的分担首页所承担的加载压力,减少首页加载用时 vue异步组件es提案的import()webpack的require,ensure()1 . vue异步组件技术 ==== 异步加载 vue-router配置路由 , 使用

The way of Webpack learning (III.) -- codeSplitting &amp; lazyLoding(代码分割和路由懒加载)

代码分割:对于一个大型的web项目来说,如果为了减少http请求,只打包出一个bundle.js文件,那么只要我们的需求修改了一点点,整个bundle.js都需要重新加载,得不偿失.所以我们不妨把代码分割成一块一块的,按需加载,而且还能利用浏览器缓存机制,如果文件没有修改,直接从缓存读取.也就是说,代码分割就是把代码切成很多块(chunk). 懒加载:按需加载,页面需要什么文件我才去加载什么文件.我现在只知道应用在路由懒加载中,就是根据路由,按需加载不同的文件. 在上一章节提到使用Commonc

React 路由懒加载的几种实现方案

这篇文字简单的介绍了React在路由懒加载方面的几种实现方案. 传统的两种方式 import() 符合ECMAScript提议的import()语法,该提案与普通 import 语句或 require 函数的类似,但返回一个 Promise 对象.这意味着模块时异步加载的 webpack v2+ 使用 使用方式 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function component() {  return import( /* webpackChu

vue-cli3+typescript+路由懒加载报错问题

vue-cli3的版本是3.4.1 出现的情况是网页显示正常,但是终端一直提示找不到模块: 如果去掉路由懒加载的方式,就没有报错: 原因是以前我们习惯直接写文件名而不加后缀, 现在使用ts时就需要写vue文件后缀了,现在加上.vue文件后缀就没有报错了: 原文地址:https://www.cnblogs.com/unclefang/p/10451845.html

Vue路由动态加载

首先新建vue工程,一般我们不会特殊处理路由,但当项目页面越来越多,路由配置也会越来越大,路由文件就会变得不好维护 import Vue from 'vue' import Router from 'vue-router' import HelloWorld from '@/components/HelloWorld' import Home from '@/components/Home' import Test1 from './test1.router.js' import Test2 f