zoukankan      html  css  js  c++  java
  • vue 组件按需引用,vue-router懒加载,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) 

    不需要改变任何路由配置,跟之前一样使用 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 的依赖(传空数组就行)。

    如果你想在组件加载的时候可以有loading提示也同样的很简单

    这里以mint-ui为例

    import { Indicator } from 'mint-ui';
    //前提是npm i mint-ui -S

    然后你就只需要稍微加一点代码

    const Foo = resolve => {
    Indicator.open();
      require.ensure(['./Foo.vue'], () => {
        resolve(require('./Foo.vue'))
        Indicator.close()
      })
    }
    //这样就可以实现组件在异步加载的时候显示loading

    效果如下

  • 相关阅读:
    A/B test
    镜像下载python包
    Jupyter 快捷键汇总
    牛顿法(Newton's method)VS梯度下降法(Gradient Descent)
    L-BFGS算法详解(逻辑回归的默认优化算法)
    np.bincount()频率统计函数
    异常值检验实战3_NBA球员表现稳定性分析
    异常值检测方法(Z-score,DBSCAN,孤立森林)
    浅谈压缩感知(十六):感知矩阵之RIP
    浅谈压缩感知(十五):感知矩阵之spark常数
  • 原文地址:https://www.cnblogs.com/coolslider/p/7074609.html
Copyright © 2011-2022 走看看