前端加载,渲染十万条数据(性能优化)

1.场景

项目中某个弹窗展示设备信息卡片,返回的设备信息很多,页面样式有很花哨,导致渲染极其缓慢
f12,查看性能,这里可以看到页面加载在哪一步分耗时最长,针对性进行优化(图为举例)
在这里插入图片描述

2.解决思路

采用虚拟列表的方式,滚动时,dom元素数量不变,只改变展示的数据
结构描述:
父盒子A,添加滚动事件
子盒子B,用于模拟滚动条长度,高度设为单条展示信息盒子的高度×子盒子的数量
子盒子C,信息展示的载体,里面是一定数量的单条展示信息盒子,子盒子C相对于父盒子A绝对定位,每次滚动时修改偏移量,保证信息显示在父盒子A的视口,不随滚动卷到其他地方

3.代码演示

<template>
  <div class="container">
    <div class="showWinsow" ref="showWinsow" :style="{ '--rowHeight': rowHeight + 'px' }" @scroll="scrollEvent">
      <!-- 子元素超出父元素的高度 -->
      <div class="scrollBox" ref="scrollBox"></div>
      <!-- 数据列表 -->
      <div class="itemBox" ref="itemBox">
        <div class="item" v-for="item in showList" :key="item">
          {{ item.n }}</div>
      </div>
    </div>
  </div>
</template>
<script>
const propsData_bigList = new Array(100000).fill(null).map((e, i) => ({ n: (i + 1) }))//模拟传入本组件的超大数据
export default {
  data() {
    return {
      list: Object.freeze(propsData_bigList),//冻结数据,优化性能,//接收传入本组件的超大数据
      offsetValue: '',//滚动的距离
      startIndex: 0,//列表展示的开始索引
      endIndex: 20,//列表展示的结束索引
      viewCount: 20,//传入的行数
      rowHeight: 20//传入的行高
    }
  },
  created() {
  },
  mounted() {
    this.$refs.showWinsow.style.height = (this.viewCount * this.rowHeight) + 'px'
    this.$refs.scrollBox.style.height = (this.rowHeight * this.list.length) + 'px'
  },
  computed: {
    showList() {
      return this.list.slice(this.startIndex, this.endIndex)
    }
  },
  methods: {
    //滚动处理逻辑
    scrollEvent() {
      this.offsetValue = Math.round(this.$refs.showWinsow.scrollTop)
      console.log(this.offsetValue, '当前滚动偏移值');
      this.startIndex = Math.round(this.offsetValue / this.rowHeight)
      this.endIndex = this.startIndex + this.viewCount
      this.$refs.itemBox.style.transform = `translateY(${this.offsetValue}px)`
    }
  }
}
</script>
<style scoped>
.container {
  width: 100%;
  height: 100%;
  overflow: hidden;
}

.showWinsow {
  position: relative;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 50%;
  overflow-y: auto;
  background-color: skyblue;
  border: 1px solid red;
}

.scrollBox {}

.itemBox {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
}

.item {
  height: var(--rowHeight);
  background-color: pink;
  border-bottom: 1px solid red;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/676860.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于飞腾 D2000 8 核+ 32G DDR+板载 6 千兆电口+ 4 千兆光口高性能网络安全主板

第一章、产品介绍 1.1 产品概述 XM-D2000GW是一款基于飞腾 D2000 8 核X100 桥片高性能网络安全主板&#xff0c;D2000 为飞腾首款支持 8 核桌面平 台处理器&#xff0c;支持双通道 DDR4-2666 内存&#xff0c;芯片内置国密 SM2/SM3/SM4/SM9 加速引擎&#xff0c;支持单精度、双…

华为ACL实验

实验拓扑&#xff1a; 实验目的&#xff1a;使用标准ACL控制某些数据流量&#xff0c;本例中控制PC1访问PC2且不让PC1访问到服务器。 实验思路&#xff1a;依据拓扑的要求&#xff0c;配置完终端设备后需要在交换机上划分两个vlan&#xff0c;分别代表两个企业的部门&#xff…

网络协议二

一、套接字Socket 基于 TCP UDP 协议的 Socket 编程&#xff0c;在讲 TCP 和 UDP 协议的时候&#xff0c;我们分客户端和服务端&#xff0c;在写程序的时候&#xff0c;我们也同样这样分。 在网络层&#xff0c;Socket 函数需要指定到底是 IPv4 还是 IPv6&#xff0c;分别对应设…

ICLR24大模型提示(1/11) | BadChain:大型语言模型的后门思维链提示

【摘要】大型语言模型 (LLM) 已证明可从思路链 (COT) 提示中获益&#xff0c;尤其是在处理需要系统推理过程的任务时。另一方面&#xff0c;COT 提示也以后门攻击的形式带来新的漏洞&#xff0c;其中模型将在推理期间在特定的后门触发条件下输出非预期的恶意内容。发起后门攻击…

k8s牛客面经篇

k8s的pod版块: k8s的网络版块: k8s的deployment版块: k8s的service版块: k8s的探针板块: k8s的控制调度板块: k8s的日志监控板块: k8s的流量转发板块: k8s的宏观版块:

Meta的开源力作:Lexical框架,富文本的未来

引言 Lexical 是一个由 Facebook&#xff08;现在称为 Meta&#xff09;开源的可扩展 JavaScript Web 文本编辑器框架。 这个框架特别强调了三个核心特性&#xff1a;可靠性、可访问性以及高性能。 旨在为开发者创造最优的开发体验。 以下是 Lexical 框架的几个关键特点和能…

广东肇庆mes系统服务商 盈致科技

广东肇庆MES系统服务商盈致科技为企业提供专业的MES系统解决方案&#xff0c;帮助企业实现生产过程的数字化管理和优化。盈致科技的服务包括但不限于以下方面&#xff1a;MES系统定制开发&#xff1a;盈致科技可以根据企业的实际需求定制开发MES系统&#xff0c;满足企业特定的…

OJ题讲解——栈与队列

目录 一.有效的括号 1.问题描述 2.问题详解 3.代码 二.用队列实现栈 1.问题描述 2.问题详解 3.代码 三.用栈实现队列 1.问题描述 2.问题详解 3.代码 四.设计循环队列 1.问题描述 2.问题详解 3.代码 一.有效的括号 1.问题描述 OJ链接&#xff1a;. - 力扣&…

归并排序(分治)

归并排序 概念介绍原理解释&#xff1a;案例步骤&#xff1a;稳定性&#xff1a;画图理解如下 代码实现 概念介绍 归并排序&#xff08;Merge Sort&#xff09;是一种经典的排序算法&#xff0c;基于分治的思想&#xff0c;它将待排序数组分成两个子数组&#xff0c;分别排序&…

基于Python+django购物商城系统设计和实现(源码+LW+部署文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

iPhone的5G设置怎么更改吗?设置好这些能够优化电池的使用寿命

随着5G技术的普及&#xff0c;iPhone用户现在可以享受到更快的网络速度&#xff0c;但这同时也带来了一个问题&#xff1a;如何在使用5G和保持电池寿命之间找到平衡&#xff1f;苹果公司通过引入“5G Auto”设置&#xff0c;为用户提供了一个智能的解决方案&#xff0c;但用户也…

3D模型轻量化:无损精度和细节,轻量化处理3D模型的云原生工具

随着科技的不断发展&#xff0c;三维模型在各个领域的应用愈加广泛。然而&#xff0c;传统的CAD工具生成的模型往往包含大量的面片和数据&#xff0c;这在进行模型查看、分享、协作以及在线展示时带来了诸多不便。模型文件过大不仅导致传输速度慢&#xff0c;还可能因为文件格式…

移远通信携手高通,共启智能出行新时代

5月30-31日&#xff0c;2024高通汽车技术与合作峰会在无锡国际会议中心举行。作为高通“汽车朋友圈”的重要一员&#xff0c;移远通信应邀参会&#xff0c;展示了数十款基于高通平台打造的车载蜂窝通信模组、C-V2X模组、智能座舱模组、Wi-Fi/蓝牙模组&#xff0c;适配高通多个平…

「实战应用」如何用图表控件LightningChart JS创建SQL仪表板应用(一)

LightningChart JS是Web上性能特高的图表库&#xff0c;具有出色的执行性能 - 使用高数据速率同时监控数十个数据源。 GPU加速和WebGL渲染确保您的设备的图形处理器得到有效利用&#xff0c;从而实现高刷新率和流畅的动画&#xff0c;常用于贸易&#xff0c;工程&#xff0c;航…

c++ - priority_queue使用和模拟实现

文章目录 一、priority_queue接口使用二、 priority_queue模拟实现三、模拟代码总览 一、priority_queue接口使用 1、函数接口与作用 接口作用priority_queue< T >构造一个空优先队列priority_queue< T >(迭代区间)通过迭代区间构造一个优先队列push(val)val入队…

计算机视觉与模式识别实验2-1 角点检测算法(Harris,SUSAN,Moravec)

文章目录 &#x1f9e1;&#x1f9e1;实验流程&#x1f9e1;&#x1f9e1;Harris算法SUSAN算法Moravec算法 &#x1f9e1;&#x1f9e1;全部代码&#x1f9e1;&#x1f9e1; &#x1f9e1;&#x1f9e1;实验流程&#x1f9e1;&#x1f9e1; Harris算法 Harris算法实现步骤&…

数据容器的通用操作、字符串大小比较 总结完毕!

1.数据容器的通用操作 1&#xff09;五类数据容器是否都支持while循环/for循环 五类数据容器都支持for循环遍历 列表、元组、字符串都支持while循环&#xff0c;集合、字典不支持&#xff08;无法下标索引&#xff09; 尽管遍历的形式不同&#xff0c;但都支持遍历操作 2&a…

在电脑端实现多个微信同时登录[使用bat脚本登录]

在电脑端实现多个微信同时登录[使用bat脚本登录] 我认为工作和生活应该分开进行&#xff0c;但往往不尽人意。 第一步&#xff0c;找到微信启动程序地址。 第二步 创建txt文本&#xff0c;写入start 你的微信启动程序地址。 start D:\微信文件\WeChat\WeChat.exe start D:\微…

The First项目报告:一场由社区驱动的去中心化加密冒险—Turbo

2023年3月14日&#xff0c;由OpenAI公司开发自回归语言模型GPT-4发布上线&#xff0c;一时之间引发AI智能领域的轩然大波&#xff0c;同时受到影响的还有加密行业&#xff0c;一众AI代币纷纷出现大幅度拉升。与此同时&#xff0c;一款名为Turbo的Meme代币出现在市场中&#xff…

在美育浸润中成长 ——中山市光后中心小学张峻皓书画作品毕业汇报展成功举办

5 月 30 号下午 3 点&#xff0c;“在美育浸润中成长——广东省中山市光后中心小学张峻皓书画作品毕业汇报展”在中山市三乡镇光后中心小学成功举行&#xff0c;本次共展出张峻皓同学近期创作书法、国画及陶瓷作品共计78幅。 广东省中山市文联兼职副主席、中山市书法家协会主席…