组件懒加载

在单页应用的世界,随着项目的复杂化,webpack打包后的文件越来越大,进入页面时,加载内容过多导致加载时间变长,不利于用户体验。

那什么是懒加载?

懒加载也叫延迟加载,即需要的时候进行加载。

1) 先来看看平时路由是如何配置

import Vue from ‘vue‘
import Router from ‘vue-router‘
import Home from ‘@/pages/home/homePage‘
import Detail from ‘@/pages/detail/detailPage‘
import Content from ‘@/pages/content/contentPage‘
import Index from ‘@/pages/index‘

Vue.use(Router)

export default new Router({
  mode: ‘history‘,
  routes: [
    {
      path: ‘/from‘,
      name: ‘index‘,
      component: Index,
      children: [
        {
          path: ‘page1‘,
          name: ‘tab1‘,
          component: Home
        },
        {
          path: ‘page2‘,
          name: ‘tab2‘,
          component: Detail
        },
        {
          path: ‘page3‘,
          name: ‘tab3‘,
          component: Content
        }
      ]
    }
  ]
})

打包结果截图:

页面请求截图(所有内容都打包到app.js里面):

2) 再来看看路由页面如何配置懒加载

  • 利用使用import()配合webpack动态导入模块
  • webpackChunkName:  webpack 2.6.0以后,支持使用注释的方式给动态导入的模块添加chunk name
import Vue from ‘vue‘
import Router from ‘vue-router‘

Vue.use(Router)

export default new Router({
  mode: ‘history‘,
  routes: [
    {
      path: ‘/from‘,
      name: ‘index‘,
      component: () => import(/* webpackChunkName: ‘index‘ */ ‘../pages/index‘),
      children: [
        {
          path: ‘page1‘,
          name: ‘tab1‘,
          component: () => import(/* webpackChunkName: ‘index/tab1‘ */ ‘../pages/home/HomePage‘)
        },
        {
          path: ‘page2‘,
          name: ‘tab2‘,
          component: () => import(/* webpackChunkName: ‘index/tab2‘ */ ‘../pages/detail/detailPage‘)
        },
        {
          path: ‘page3‘,
          name: ‘tab3‘,
          component: () => import(/* webpackChunkName: ‘index/tab3‘ */ ‘../pages/content/contentPage‘)
        }
      ]
    }
  ]
})

打包结果截图:

页面请求截图(根据上面的配置可知实际还有chunk2, chunk3还未加载,需要切换到对应的页面才会按需加载出来):

3) 除了在路由页面配置懒加载,路由页面中的组件也可实现懒加载

export default {
  name: ‘index‘,
  components: {
    headerTab: () => import(‘@/components/header‘)
  }
}

页面请求截图:

4) 最后平时的项目中该如何选

  • 当路由页面和路由页面找中的组件全使用懒加载时: 项目最大化的实现了按需加载,但一个页面嵌入多个组件时与此同时将带来过多的http请求,可能造成网页显示过慢且渲染参差不齐的问题。
  • 路由页面懒加载,路由页面中的使用较为频繁的组件使用懒加载: 合理满足按需加载的情况下,又相应减少了http请求。但在团队开发合作中,需要将按需加载的组件和非按需加载的组件做好划分,达到更好的维护。

参考资料:

1) https://www.cnblogs.com/zhanyishu/p/6587571.html (vue2组件懒加载浅析)

原文地址:https://www.cnblogs.com/Tiboo/p/12536739.html

时间: 2024-08-29 12:57:01

组件懒加载的相关文章

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

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

Ionic3 组件懒加载

使用懒加载能够减少程序启动时间,减少打包后的体积,而且可以很方便的使用路由的功能. 使用懒加载: 右侧红色区域可以省略掉(引用.声明也删掉) 若使用ionic命令新建page,则无需进行下面的操作,否则进行下面的操作: 新建文件:home.module.ts import { NgModule } from '@angular/core';import { IonicPageModule } from 'ionic-angular';import { LoginPage } from './lo

vue组件懒加载(Load On Demand)

在Web应用程序中,系统的瓶颈常在于系统的响应速度.如果系统响应速度过慢,用户就会出现埋怨情绪,系统的价值也因此会大打折扣.因此,提高系统响应速度,是非常重要的. 懒加载(Load On Demand)是一种独特而又强大的数据获取方法,它能够在用户滚动页面的时候自动获取更多的数据,而新得到的数据不会影响原有数据的显示,同时最大程度上减少服务器端的资源耗用. 用vue.js写单页面应用时,会出现打包后的JavaScript包非常大,影响页面加载,我们可以利用路由的懒加载去优化这个问题,当我们用到某

vue组件懒加载与路由懒加载的实现

在项目很大的时候,首页会一次导入所有页面与组件,可以使用懒加载实现项目的优化,但项目很小,不推荐使用,项目小,分开后的懒加载会发多次请求,带来更多的性能缺陷 路由写法 //假设components下有一个home.vue,需要在路由页面引入 new Router({ routes:[{ path:'/', name:"home", components:()=>import("./components/home") //将路由顶部的引入,放在这里就实现路由的懒

关于Element UI tree组件 懒加载的更新操作

近期根据需求,要做一个懒加载的组织树,并且可以编辑组织树.但是编辑了之后无法进行实时更新. 一开始想到了很多解决方案,也在网上参考了很多方案,但是都又种种不足. 所以我去看了elementUI的tree组件的懒加载方法的源代码 Node.prototype.loadData = function loadData(callback) { var _this5 = this; var defaultProps = arguments.length > 1 && arguments[1]

前端性能优化方案-路由懒加载实现

组件懒加载也叫按需加载: 当打包构建应用时,JavaScript 包会变得非常大,影响页面加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了. 打包 build 后的 dist 中 js 包文件太大,影响页面加载速度,使用 vue 的异步组件和 webpack 的代码分割功能,实现路由组件的懒加载: 下面通过 vue 的异步加载和 webpack 来实现组件懒加载: 先看例子不使用路由懒加载的情况: import Vue from 'v

使用 vant 的 v-lazy 实现图片 vue 在移动端的懒加载

官方文档:https://youzan.github.io/vant/#/zh-CN/lazyload 引入 Lazyload 是 Vue 指令,使用前需要对指令进行注册 import Vue from 'vue'; import { Lazyload } from 'vant'; // options 为可选参数,无则不传 Vue.use(Lazyload, options); 基本用法 将v-lazy指令的值设置为你需要懒加载的图片 <img v-for="img in imageLi

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

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

vue 组件按需引用,vue-router懒加载,vue打包优化,加载动画

当打包构建应用时,Javascript 包会变得非常大,影响页面加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了. 结合 Vue 的 异步组件 和 Webpack 的 code splitting feature, 轻松实现路由组件的懒加载. 我们要做的就是把路由对应的组件定义成异步组件 const Foo = resolve => { // require.ensure 是 Webpack 的特殊语法,用来设置 code-split