Vue2实现组件延迟加载的示例代码

 更新时间:2024年01月24日 14:12:11   作者:下雪天的夏风  
当一个页面需要加载较多个组件时,并且组件自身又比较复杂,如果一次性加载,可能等待时间较长,体验不好,这个时候就需要延迟加载了,本文为大家介绍了Vue2实现组件延迟加载的示例代码,需要的可以参考下

1.背景

当一个页面需要加载较多个组件时,并且组件自身又比较复杂。如果一次性加载,可能等待时间较长,体验不好。

一种解决办法:分批次的来渲染子组件。

2.实现

通过 requestAnimationFrame(callback) 实现,同时能够控制按照指定顺序来渲染。

简单理解为:浏览器会按照一定的频率来重绘页面,大概 60次/s。每次重绘前都会执行 callback 函数。这样的话,我们可以在每次重绘前都只渲染一个组件,来实现组件的延迟加载。

示例代码:

2.1延迟加载的核心代码

通过 mixin 来实现。大致逻辑:

首先会传入一个最大重绘次数。

定义一个计数当前重绘次数的变量,每次调用 callback 时自增,重绘次数达到最大则结束 requestAnimationFrame 的执行。

定义一个方法,参数为指定的顺序,返回值用于判断组件是否展示。

比如 v-if="deferItem(5)" 表示浏览器第5次重绘时渲染该组件。

export default function defer(maxFrameCount) {
  return {
    data() {
      return {
        frameCount: 0,
      };
    },
    mounted() {
      const refreshFrame = () => {
        requestAnimationFrame(() => {
          this.frameCount++;
          if (this.frameCount < maxFrameCount) {
            refreshFrame();
          }
        });
      };
      refreshFrame();
    },
    methods: {
      deferItem(showFrameCount) {
        return this.frameCount >= showFrameCount;
      },
    },
  };
}

2.2模拟的复杂组件

子组件内部有 20000 个元素需要渲染,来模拟复杂的组件。

<template>
  <div class="container">
    <div v-for="n in 20000" class="item"></div>
  </div>
</template>

<script></script>
<style scoped>
.container {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  width: 300px;
  height: 300px;
}

.item {
  width: 5px;
  height: 5px;
  background-color: #eee;
  margin: 0.1em;
}
</style>

2.3父组件

模拟渲染 25 个复杂子组件。

<template>
  <div class="container">
    <div v-for="n in 25" :key="n" class="wrapper">
      <HeavyComp v-if="deferItem(n)" />
    </div>
  </div>
</template>

<script>
import HeavyComp from "./components/HeavyComp.vue";
import defer from "./mixins/defer";
export default {
  components: {
    HeavyComp,
  },
  mixins: [defer(25)],
};
</script>
<style scoped>
.container {
  display: flex;
  flex-wrap: wrap;
}
.wrapper {
  border: 1px solid salmon;
}
</style>

3.效果

到此这篇关于Vue2实现组件延迟加载的示例代码的文章就介绍到这了,更多相关Vue2组件延迟加载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue如何动态绑定img的src属性(v-bind)

    vue如何动态绑定img的src属性(v-bind)

    这篇文章主要介绍了vue如何动态绑定img的src属性(v-bind),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • 详解vue中父子参数传递双向的方式不同

    详解vue中父子参数传递双向的方式不同

    本文主要介绍了详解vue中父子参数传递双向的方式不同,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06
  • Vue项目打包成Docker镜像包的简单步骤

    Vue项目打包成Docker镜像包的简单步骤

    最近做时速云项目部署,需要将前端项目打成镜像文件,下面这篇文章主要给大家介绍了关于Vue项目打包成Docker镜像包的简单步骤,需要的朋友可以参考下
    2023-10-10
  • Vue使用v-for数据渲染顺序混乱的原因及解决方案

    Vue使用v-for数据渲染顺序混乱的原因及解决方案

    在 Vue.js 中,使用 v-for 指令进行数据渲染时,有时会遇到渲染顺序混乱的问题,这种问题主要与 Vue 的响应式系统、DOM 更新机制以及数组的变更方法有关,以下是对这一现象的深入分析及解决方案,需要的朋友可以参考下
    2025-01-01
  • 关于Vue中的watch监视属性

    关于Vue中的watch监视属性

    这篇文章主要介绍了关于Vue中的watch监视属性,Vue中的watch默认不监视对象内部值的改变,当被监视的属性变化时,回调函数自动调用,进行相关操作,需要的朋友可以参考下
    2023-04-04
  • 分享几个可以助你提高效率的Vue指令

    分享几个可以助你提高效率的Vue指令

    vue是一款渐进式JavaScript框架,渐进式是指由浅到深,由简单到复杂的使用vue框架,下面这篇文章主要给大家分享介绍了几个可以助你提高效率的Vue指令,需要的朋友可以参考下
    2022-05-05
  • vue.js 嵌套循环、if判断、动态删除的实例

    vue.js 嵌套循环、if判断、动态删除的实例

    下面小编就为大家分享一篇vue.js 嵌套循环、if判断、动态删除的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Vue和React的异同点解读

    Vue和React的异同点解读

    文章比较了Vue和React的核心设计理念、响应式系统、虚拟DOM、编译时优化和功能特性,Vue通过编译时优化和响应式系统实现细粒度更新,而React依赖运行时调度(Fiber)实现可控的更新优先级,两者都支持函数式编程,但React在函数式编程方面提供了更高的灵活性
    2025-02-02
  • vue3+Echarts页面加载不渲染显示空白页面的解决

    vue3+Echarts页面加载不渲染显示空白页面的解决

    这篇文章主要介绍了vue3+Echarts页面加载不渲染显示空白页面的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue中使用富文本编辑框的实践与探索

    Vue中使用富文本编辑框的实践与探索

    本文详细介绍了如何在Vue项目中集成和使用富文本编辑框,并分享了一些实践经验,介绍了为什么需要富文本编辑框,Vue中常用的富文本编辑器,以及如何安装、配置和使用Vue-Quill-Editor,本文还提供了一些基本的配置示例,帮助开发者在实际项目中根据需求进行更多探索和定制
    2024-10-10

最新评论