广告
返回顶部
首页 > 资讯 > 前端开发 > html >vue2组件如何实现懒加载
  • 220
分享到

vue2组件如何实现懒加载

2024-04-02 19:04:59 220人浏览 独家记忆
摘要

这篇文章给大家分享的是有关Vue2组件如何实现懒加载的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、 什么是懒加载懒加载也叫延迟加载,即在需要的时候进行加载,随用随载。二、为什

这篇文章给大家分享的是有关Vue2组件如何实现懒加载的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、 什么是懒加载

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

二、为什么需要懒加载

在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,延时过长,不利于用户体验,而运用懒加载则可以将页面进行划分,需要的时候加载页面,可以有效的分担首页所承担的加载压力,减少首页加载用时

三、如何与webpack配合实现组件懒加载

1、在WEBpack配置文件中的output路径配置chunkFilename属性

output: {

    path: resolve(__dirname, 'dist'),

    filename: options.dev ? '[name].js' : '[name].js?[chunkhash]',

    chunkFilename: 'chunk[id].js?[chunkhash]',

    publicPath: options.dev ? '/assets/' : publicPath

  },

chunkFilename路径将会作为组件懒加载的路径

2、配合webpack支持的异步加载方法

  • resolve => require([URL], resolve), 支持性好

  • () => system.import(URL) , webpack2官网上已经声明将逐渐废除, 不推荐使用

  • () => import(URL), webpack2官网推荐使用, 属于es7范畴, 需要配合babel的syntax-dynamic-import插件使用, 具体使用方法如下

复制代码 代码如下:


npm install --save-dev babel-core babel-loader babel-plugin-syntax-dynamic-import babel-preset-es2015

use: [{

    loader: 'babel-loader',

    options: {

     presets: [['es2015', {modules: false}]],

     plugins: ['syntax-dynamic-import']

    }

   }]

四、具体实例中实现懒加载

1、路由中配置异步组件

export default new Router({

  routes: [

    {

      mode: 'history',

      path: '/my',

      name: 'my',

      component: resolve => require(['../page/my/my.vue'], resolve),//懒加载

    },

  ]

})

2、实例中配置异步组件

components: {

    historyTab: resolve => {require(['../../component/historyTab/historyTab.vue'], resolve)},//懒加载

    //historyTab: () => import('../../component/historyTab/historyTab.vue')

  },

3、全局注册异步组件

Vue.component('mideaHeader', () => {

  System.import('./component/header/header.vue')

})

五、配置异步组件实现懒加载的问题分析

1、多次进出同一个异步加载页面是否会造成多次加载组件?

答:否,首次需要用到组件时浏览器会发送请求加载组件,加载完将会缓存起来,以供之后再次用到该组件时调用

2、在多个地方使用同一个异步组件时是否造成多次加载组件?如:

//a页面

export default {

  components: {

    historyTab: resolve => {require(['../../component/historyTab/historyTab.vue'], resolve)},//懒加载

  },

}
//b页面

export default {

  components: {

    historyTab: resolve => {require(['../../component/historyTab/historyTab.vue'], resolve)},//懒加载

  },

}

答:否,理由同上

3、如果在两个异步加载的页面中分别同步与异步加载同一个组件时是否会造成资源重用? 如:

//a页面
import historyTab from '../../component/historyTab/historyTab.vue';
export default {
  components: {
    historyTab
  },
}

//b页面
export default {
  components: {
    historyTab: resolve => {require(['../../component/historyTab/historyTab.vue'], resolve)},//懒加载
  },
}

答: 会, 将会造成资源重用, 根据打包后输出的结果来看, a页面中会嵌入historyTab组件的代码, b页面中的historyTab组件还是采用异步加载的方式, 另外打包chunk;

解决方案: 组件开发时, 如果根页面没有导入组件的情况下,而是在其他异步加载页面中同时用到组件, 那么为实现资源的最大利用,在协同开发的时候全部人都使用异步加载组件

4、在异步加载页面中载嵌入异步加载的组件时对页面是否会有渲染延时影响?

答:会, 异步加载的组件将会比页面中其他元素滞后出现, 页面会有瞬间闪跳影响;

解决方案:因为在首次加载组件的时候会有加载时间, 出现页面滞后, 所以需要合理的进行页面结构设计, 避免首次出现跳闪现象;

六、懒加载的最终实现方案

1、路由页面以及路由页面中的组件全都使用懒加载

优点:(1)最大化的实现随用随载

   (2)团队开发不会因为沟通问题造成资源的重复浪费    

缺点:(1)当一个页面中嵌套多个组件时将发送多次的Http请求,可能会造成网页显示过慢且渲染参差不齐的问题

2、路由页面使用懒加载, 而路由页面中的组件按需进行懒加载, 即如果组件不大且使用不太频繁, 直接在路由页面中导入组件, 如果组件使用较为频繁使用懒加载

优点:(1)能够减少页面中的http请求,页面显示效果好

缺点:(2)需要团队事先交流, 在框架中分别建立懒加载组件与非懒加载组件文件夹

3、路由页面使用懒加载,在不特别影响首页显示延迟的情况下,根页面合理导入复用组件,再结合方案2

优点:(1)合理解决首页延迟显示问题

        (2)能够最大化的减少http请求, 且做其他他路由界面的显示效果最佳

缺点:(1)还是需要团队交流,建立合理区分各种加载方式的组件文件夹

七、采用第三种方案进行目录结构设计

vue2组件如何实现懒加载  

八、具体代码实现设计

1、路由设计:

import Router from 'vue-router';
import Vue from 'vue';
Vue.use(Router);

export default new Router({
  routes: [
    {
      mode: 'history',
      path: '/home',
      name: 'home',
      component: resolve => require([URL], resolve),//懒加载
      children: [
        {
          mode: 'history',
          path: '/home/:name',
          name: 'any',
          component: resolve => require(['../page/any/any.vue'], resolve),//懒加载
        },
      ]
    },
    {
      mode: 'history',
      path: '/store',
      name: 'store',
      component: resolve => require(['../page/store/store.vue'], resolve),//懒加载,
      children: [
        {
          mode: 'history',
          path: '/store/:name',
          name: 'any',
          component: resolve => require(['../page/any/any.vue'], resolve),//懒加载
        },
      ]
    },
    {
      mode: 'history',
      path: '/my',
      name: 'my',
      component: resolve => require(['../page/my/my.vue'], resolve),//懒加载,
      children: [
        {
          mode: 'history',
          path: '/my/:name',
          name: 'any',
          component: resolve => require(['../page/any/any.vue'], resolve),//懒加载
        },
      ]
    },
  ]
})

(1)首层的路由根组件分别对应的tab页面

(2)根目录后跟着各个子路由页面,子路由采用动态路由配合路由的编程式导航再加上vuex,最优化提高开发效率

直接贴上代码:



//vuex配置

import Vue from 'vue';

import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({

  state: {

    //路由组件存储器

    routers: {}

  },

  getters: {

    routers: state => {

      return state.data;

    }

  },

  mutations: {

    //动态增加路由

    addRouter: (state, data) => {

      state.routers = Object.assign({}, state.routers, {

        [data.name]: data.component

      });

    }

  },

  actions: {

    acMethods({commit}) {

 

    }

  },

})

 

//根目录中注册路由组件

window.midea = {

  reGISterRouter(name, component) {

    Store.commit('addRouter', {

      name: name,

      component: component

    })

  }

};//页面使用路由导航 

openAnyPage() {
  midea.registerRouter('module', resolve => {require(['../module/module.vue'], resolve)});//懒加载
  this.$router.push({path: '/home/module', query: {title: this.title}});
}
//页面中使用动态组件 

<template>  

 <component :is="currentRouter" :moduleName="title">

</component> 

</template>

<script src="./any.js">

export default {

  data () {

    return {

      routeName: '',

      currentRouter: '',

      title: '',

    }

  },

  created() {

    this.routeName = this.$route.params.name;

    this.title = this.$route.query.title;

    this.currentRouter = this.$store.state.routers[this.routeName];

  },

  methods: { 

  }

}

</script>

vue2组件如何实现懒加载

感谢各位的阅读!关于“vue2组件如何实现懒加载”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: vue2组件如何实现懒加载

本文链接: https://www.lsjlt.com/news/71010.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue2组件如何实现懒加载
    这篇文章给大家分享的是有关vue2组件如何实现懒加载的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、 什么是懒加载懒加载也叫延迟加载,即在需要的时候进行加载,随用随载。二、为什...
    99+
    2022-10-19
  • el-tree树组件懒加载怎么实现
    这篇“el-tree树组件懒加载怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“el-tree树组件懒加载怎么实现”文...
    99+
    2023-07-05
  • vue3.0+vite2实现动态异步组件懒加载
    目录创建一个vite项目 创建组件 创建一个vite项目 性能决定成败;vite确实快; cmd 命令行(默认你已经安装了node & npm),执行npm init @v...
    99+
    2022-11-12
  • MyBatis懒加载如何实现
    这篇文章主要介绍“MyBatis懒加载如何实现”,在日常操作中,相信很多人在MyBatis懒加载如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyBatis懒加载如何实现”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • webpack如何实现懒加载和预加载
    小编给大家分享一下webpack如何实现懒加载和预加载,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!正常加载为了看的方便,index.js中的代码非常简单console.log('index.js执行了')...
    99+
    2023-06-22
  • android fragment懒加载如何实现
    Android Fragment的懒加载可以通过以下步骤实现:1. 在Fragment类中添加一个boolean类型的变量isLoa...
    99+
    2023-08-26
    android fragment
  • 如何通过IntersectionObserver实现懒加载
    通常懒加载等都会通过监听scroll事件用getBoundingClientRect()来判断元素位置来决定是否可以开始加载。性能开销是比较大的,为了节省性能又需要各种操作去弥补,例...
    99+
    2023-05-16
    IntersectionObserver懒加载
  • vue如何实现路由懒加载
    在vue中实现路由懒加载的方法有:1.使用import方法实现;2.使用require.ensure()方法实现;3.使用vue异步组件实现;具体方法如下:使用import方法实现路由懒加载const Home = () => import...
    99+
    2022-10-20
  • JavaScript如何实现图片懒加载
    这篇文章主要介绍了JavaScript如何实现图片懒加载,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。图片懒加载imagegetBoundClientRect 的实现方式,监...
    99+
    2023-06-27
  • jquery插件如何实现懒汉式加载图片
    这篇文章主要为大家展示了“jquery插件如何实现懒汉式加载图片”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jquery插件如何实现懒汉式加载图片”这篇文章吧...
    99+
    2022-10-19
  • vue3.0+vite2实现动态异步组件懒加载的方法
    这篇文章主要介绍“vue3.0+vite2实现动态异步组件懒加载的方法”,在日常操作中,相信很多人在vue3.0+vite2实现动态异步组件懒加载的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue3....
    99+
    2023-06-20
  • vue-router如何实现路由懒加载
    这篇文章主要为大家展示了“vue-router如何实现路由懒加载”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue-router如何实现路由懒加载”这篇文章吧...
    99+
    2022-10-19
  • 如何实现前端图片懒加载
    这篇文章主要介绍了如何实现前端图片懒加载,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。定义图片懒加载又称图片延时加载、惰性加载,即在用户需要...
    99+
    2022-10-19
  • javascript如何实现图片预加载和懒加载功能
    这篇文章主要介绍“javascript如何实现图片预加载和懒加载功能”,在日常操作中,相信很多人在javascript如何实现图片预加载和懒加载功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”javascr...
    99+
    2023-06-14
  • js前端如何实现图片懒加载
    这篇文章主要介绍js前端如何实现图片懒加载,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!思路:将页面里所有img属性src属性用data-xx代替,当页面滚动直至此图片出现在可视区域...
    99+
    2022-10-19
  • Mybatis如何实现关联属性懒加载
    Mybatis 关联属性懒加载 延迟加载配置 mybatis默认没有开启延迟加载,需要在config.xml中setting配置。 lazyLoadingEnabled:true使用...
    99+
    2022-11-12
  • 详解如何在Java中实现懒加载
    目录Java 中如何实现懒加载使用 Supplier 接口实现懒加载使用双重检查锁定模式实现懒加载Java 中如何实现懒加载 懒加载是一种常见的优化技术,它可以延迟对象的创建或初始化...
    99+
    2023-03-19
    Java实现懒加载 Java懒加载
  • 小程序列表懒加载如何实现
    本文小编为大家详细介绍“小程序列表懒加载如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“小程序列表懒加载如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。小程序上的列表懒加载长列表我们经常接触到,长列...
    99+
    2023-06-29
  • 基于vue2如何实现上拉加载功能
    这篇文章主要为大家展示了“基于vue2如何实现上拉加载功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于vue2如何实现上拉加载功能”这篇文章吧。具体内容如...
    99+
    2022-10-19
  • vue2中如何实现table分页组件
    这篇文章主要介绍了vue2中如何实现table分页组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下pagination.js:...
    99+
    2022-10-19
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作