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

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.viewCountthis.$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.mzph.cn/web/21399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速入门文件操作+5种例子演示

文件操作 基本操作注意事项例子1&#xff1a;读取文件内容例子2&#xff1a;写入文件内容例子3&#xff1a;追加文件内容例子4&#xff1a;读取并写入文件内容&#xff08;复制文件&#xff09;例子5&#xff1a;使用二进制模式读写文件 基本操作 在C语言中&#xff0c;使用文…

项目中统一异常处理

项目中统一异常处理 1.异常处理框架图2.实现 1.异常处理框架图 异常处理除了输出在日志中&#xff0c;还需要提示给用户&#xff0c;前端和后端需要作一些约定&#xff1a; 错误提示信息统一以json格式返回给前端。以HTTP状态码决定当前是否出错&#xff0c;非200为操作异常。…

在国内PMP含金量并不高?

PMP已经在全球194个国家和地区得到广泛认可&#xff0c;自1999年开始在国内实施。PMP被认为是项目管理专业身份的象征&#xff0c;是项目经理最重要的资质。获得PMP证书意味着个人的项目操作水平已经得到了PMI的认可&#xff0c;具备国际专业项目操作者水平&#xff0c;有资格专…

就凭这张图,下订华为享界S9

文 | Auto芯球 作者 | 雷慢 冲啦&#xff01;就在刚刚&#xff0c; 我们团队下订了一辆享界S9&#xff0c; 还琢磨买奔驰S级&#xff0c;宝马7系和奥迪A8的老板们&#xff0c; 是应该试试享界S9了&#xff0c; 至少先占个坑&#xff0c;8月底S9上市当天&#xff0c; 可以…

Linux 系统中的用户与用户组管理

Linux 系统中的用户与用户组管理 Linux系统是一个多用户多任务的分时操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统。 用户的账号一方面可以帮助系统管理员对使用系统的用户进行…

【vscode免密连接云服务器】

目录&#xff1a; 前言1.1 生成 SSH 密钥对1.2 将公钥复制到远程服务器1.3配置remote ssh 插件信息 总结 前言 剑指offer&#xff1a;一年又120天 1.1 生成 SSH 密钥对 在本地cmd命令窗口执行: ssh-keygen -t rsa会提示你设置生成密钥的文件、密码等等&#xff0c;可以一路回…

Flask启动重复注册schedule问题

最近flask里面新加个schedule任务&#xff0c;但是启动的时候看log&#xff0c;schedule被注册了两次。导致每次任务都会被执行两次&#xff0c;查了下解决方案&#xff0c;记录 加一个标志位就行了 import osfrom flask import Flask from apscheduler.schedulers.backgroun…

【Makefile笔记】小白入门篇

【Makefile笔记】小白入门篇 文章目录 【Makefile笔记】小白入门篇所需组件一、简单了解Makefile1.Makefile简介2.Makefile 原理 二、为什么要使用Makefile1.解决编译时链库的不便2.提高编译效率&#xff0c;缩短编译时间&#xff08;尤其是大工程&#xff09; 三、Makefile语法…

创建线程的技术难点

在软件开发中&#xff0c;创建线程并正确地管理它们是一个复杂而关键的任务&#xff0c;涉及的技术难点主要有&#xff1a; 线程同步&#xff1a;当多个线程需要访问共享资源时&#xff0c;必须确保它们以某种方式同步&#xff0c;以避免数据不一致或其他并发问题。例如&#…

css 图片上添加模糊背景的文字内容

html部分 <div class"onlogo"> <img src"../assets/img/banner.png" /><div class"imgText"><div class"title">一体化电子印章应用服务</div><div class"content">为企业提供安全可靠…

迭代器的使用

参考&#xff1a; 生成器迭代器next函数 迭代器的使用 说到迭代器就必须先要提一下可迭代对象&#xff08;iterable&#xff09;&#xff0c;可迭代对象是能够逐一返回其成员项的对象。可迭代对象包括序列类型&#xff08;如list、str、tuple&#xff09;和非序列类型&#…

SpringCloud Consul基础入门与使用实践总结

【1】Consul简介 官网地址&#xff1a;https://www.consul.io/intro/index.html 下载地址&#xff1a;https://www.consul.io/downloads.html 中文文档&#xff1a;https://www.springcloud.cc/spring-cloud-consul.html ① 基础概念 Consul 是一套开源的分布式服务发现和…

JavaWeb前端有哪些:深度解析与全面概览

JavaWeb前端有哪些&#xff1a;深度解析与全面概览 在JavaWeb开发领域&#xff0c;前端技术扮演着至关重要的角色。那么&#xff0c;JavaWeb前端究竟包含哪些内容呢&#xff1f;本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;为您深入剖析JavaWeb前端的技术栈和…

网络编程(五)

网络编程&#xff08;五&#xff09; 网络服务器超时检测使用select进行超时检测套接字属性**getsockopt:获取socket软通道的某项属性值**setsockopt:设置socket软通道的某项属性值**&#xff08;socket建立之后就可使用&#xff09; 信号**signal()&#xff1a;信号处理函数se…

Android11 AudioTrack 创建过程

Android 系统播放声音&#xff0c;需要创建AudioTrack来和AudioFlinger通信&#xff0c;其创建过程如下 根据传入的声音属性得到output通过得到的output&#xff0c;找到播放线程AudioFlinger在播放线程内&#xff0c;创建Track&#xff0c;和AudioTrack对应。后续通过它们进…

MiniQMT国债逆回购策略Python代码全解析

文章目录 💼 国债逆回购:稳赚不赔的秘密武器📈 国债逆回购基础知识📝 国债逆回购策略逻辑💻 Python代码实现📊 策略优化与风险管理🌐 结语💼 国债逆回购:稳赚不赔的秘密武器 国债逆回购,一种低风险、高流动性的投资方式,是股市小白向高手进阶的必经之路。本…

每天一个数据分析题(三百四十五)

客户生命周期主要分为新增、留存和流失三个阶段&#xff0c;以下描述正确的是&#xff1f; A. 客户生命周期有起点没有终点 B. 新增阶段主要描述商家从不同渠道获取的新增客户的数量及质量 C. 留存阶段是整个客户生命周期中时间跨度最长的阶段 D. 若客户在单位时间内没有触…

低代码设计中的组织结构的作用与模式

一、组织结构的作用 在低代码设计中&#xff0c;组织结构是系统运作的基石&#xff0c;它定义了系统中的关键元素&#xff0c;包括人员、部门、角色&#xff0c;以及一人多部门、一人多部门多角色的复杂关系。这种定义不仅为系统提供了清晰的运行框架&#xff0c;还确保了系统…

这是一张单纯的图片

说明&#xff1a;通过简单的一张图片找到flag。 打开给出的图片&#xff0c;是一个卡通头像。 方法一&#xff1a; 使用notepad再次打开图片&#xff0c;最后一行发现一行编码。 通过给出的编码格式&#xff0c;可判断是ASCII编码。 使用Ascii编码解码工具&#xff0c;对这串…

解决uniApp单独设置小程序的样式不起作用方法之一

问题点&#xff1a;在uniApp项目中单独设置了微信小程序员端的样式&#xff0c;结果发现设置的不起作用 原因&#xff1a;作用域的问题&#xff08;因为我设置了scoped&#xff0c;删除掉就好了&#xff09; /**我是这么设置的**/ <style scoped>/* #ifdef MP-WEIXIN */p…