当前位置: 首页 > article >正文

vue虚拟列表优化前端性能

文章目录

  • 前言
  • 1. 创建Vue组件
    • 2. 使用虚拟列表组件
  • 总结


前言

在Vue.js中实现虚拟列表(Virtual List)是为了优化长列表的渲染性能。虚拟列表的核心思想是仅渲染当前视口(viewport)中可见的部分列表项,而不是一次性渲染整个列表。这样可以显著减少DOM节点的数量,提高页面的渲染速度和滚动性能。(只是作为参考,也可以不按照我的方式来写)


1. 创建Vue组件

首先,创建一个Vue组件,用于封装虚拟列表的逻辑。

<template>
  <div
    ref="scrollContainer"
    class="scroll-container"
    @scroll="handleScroll"
    style="height: 100%; overflow-y: auto;"
  >
    <div
      class="list-content"
      :style="{ height: totalHeight + 'px', transform: `translateY(${scrollTop}px)` }"
    >
      <div
        v-for="item in visibleItems"
        :key="item.id"
        class="list-item"
        :style="{ height: itemHeight + 'px' }"
      >
        {{ item.text }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'VirtualList',
  props: {
    items: {
      type: Array,
      required: true,
    },
    itemHeight: {
      type: Number,
      required: true,
    },
    visibleCount: {
      type: Number,
      default: 10,
    },
  },
  data() {
    return {
      scrollTop: 0,
    };
  },
  computed: {
    totalHeight() {
      return this.items.length * this.itemHeight;
    },
    startIndex() {
      return Math.floor(this.scrollTop / this.itemHeight);
    },
    endIndex() {
      return this.startIndex + this.visibleCount;
    },
    visibleItems() {
      return this.items.slice(this.startIndex, this.endIndex).map((item, index) => ({
        ...item,
        id: `${this.startIndex}-${index}`, // 为每个项生成唯一的key
      }));
    },
  },
  methods: {
    handleScroll() {
      this.scrollTop = this.$refs.scrollContainer.scrollTop;
    },
  },
};
</script>

<style scoped>
.scroll-container {
  position: relative;
  width: 100%;
}
.list-content {
  position: absolute;
  width: 100%;
}
.list-item {
  box-sizing: border-box;
  border-bottom: 1px solid #ddd;
  padding: 10px;
}
</style>

2. 使用虚拟列表组件

<template>
  <div>
    <virtual-list :items="items" :itemHeight="50" :visibleCount="10" />
  </div>
</template>

<script>
import VirtualList from './components/VirtualList.vue';

export default {
  components: {
    VirtualList,
  },
  data() {
    return {
      items: Array.from({ length: 1000 }, (_, i) => ({
        id: i,
        text: `Item ${i + 1}`,
      })),
    };
  },
};
</script>

总结

通过上述步骤,你就可以在Vue.js中实现一个简单的虚拟列表组件,从而优化长列表的渲染性能。这个示例可以根据具体需求进行扩展和优化,比如增加缓冲区域、支持动态高度等。


http://www.kler.cn/a/528646.html

相关文章:

  • 分层多维度应急管理系统的设计
  • 新能源算力战争:为什么AI大模型需要绿色数据中心?
  • Ubuntu16.04编译安装Cartographer 1.0版本
  • 2025:影刀RPA使用新实践--CSDN博客下载
  • JavaScript原型链与继承:优化与扩展的深度探索
  • 代码随想录34 动态规划
  • generator 生成器,enumerate,命名空间(笔记向)
  • 【大模型LLM面试合集】大语言模型架构_llama系列模型
  • Vue.js 比较 Composition API 和 Options API
  • vsnprintf() 将可变参数格式化输出到字符数组
  • 什么是门控循环单元?
  • 爬取鲜花网站数据
  • 使用 Docker(Podman) 部署 MongoDB 数据库及使用详解
  • 白话DeepSeek-R1论文(三)| DeepSeek-R1蒸馏技术:让小模型“继承”大模型的推理超能力
  • 为AI聊天工具添加一个知识系统 之82 详细设计之23 符号逻辑 正则表达式规则 之1
  • 如何实现滑动列表功能
  • 智慧园区综合管理系统如何实现多个维度的高效管理与安全风险控制
  • c++ list的front和pop_front的概念和使用案例
  • 【3】阿里面试题整理
  • http 请求类型及其使用场景
  • python学习——函数的返回值
  • 【python】tkinter实现音乐播放器(源码+音频文件)【独一无二】
  • error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
  • C#面向对象(封装)
  • C语言:整型提升
  • 前端知识速记:节流与防抖