如何改造antd-vue的table支持虚拟列表功能

news2024/10/7 2:30:20

对于超大数据量的接口来说,如果前端直接一股脑的渲染出来,必然会导致渲染超时、操作卡顿、内存爆表、网页奔溃等情况,因此一般的对于大数据量的列表处理,无非就以下几种方式

  1. 采取分页的方式,减少每页的数量 比如每页10条
  2. 采取懒加载的方式,滚到底部再加载第二页数据(缺陷就是后面会越来越卡)
  3. 采用可见范围渲染的方式,这需要判断当且节点是否在可见范围(利用高度计算或者用IntersectionObserver)
  4. 采用虚拟列表的方式(原理就是切片+滚动  让用户察觉不到)

由于我们的业务需要每次查看成千上万条数据,并需要对行数据进行各种操作,如下图

 

因此用分页是不满足需求的,一开始我也是直接采用渲染的方式,结果就是

 

 

这种结果肯定达不到上线的性能要求的,经过对比 我决定采用虚拟列表+滚动分页加载数据的方式来处理,最终优化后的性能达到2s内渲染完成。下面就将改造步骤和遇到的问题跟大家进行分享。

首先跟大家简单讲讲虚拟列表的原理,这里借用下网络上大神总结的图

 

简单说就是将大数据切片成只显示在可见范围内的一小段,然后结合容器的滚动事件不断地改变前后下标从而切割大数据,再结合缓冲区和填充以及requestAnimationFrame等api的运用让滚动更丝滑,让用户无感。

那具体怎么做呢?

  1. 获取容器元素

 

 

  1. 计算容器可视高度及上下padding 从而撑开容器

  1. 监听容器的滚动事件,滚动的时候不断修改startIndex 和endIndex

 

以上都完成就能实现基本的虚拟滚动了,这里为了解决快速滚动出现白屏现象,采用了缓冲区的方式,往下滚动时设置了Math.floor(this.containerSize / 3)范围的缓冲,向上滚动的时候采用了startIndex>6就为6行缓存。同时解决全选和排序等table原有的功能。

改造了table的onChange方法:

排序:

全选:

首先定义了两个变量来存储全选的key和rows数据

 

其次通过onSelectAll事件来判断是否点击了全选按钮

那么我们怎么判断是否滚动到了当前数据的底部,从而再次获取数据呢?我的思路就是判断endIndex是否大于或等于了tableData.length  当然为了保证在一定高度就去请求新数据  我们这里不能直接判断  而应该使用一个缓冲数  比如 tableData.length-endIndex >=4  距离底部还有4行的时候就去请求数据,从而优化体验。具体代码就交给大家 自己实现啦,相信你一定行

至于table里每行的操作,比如input select radio 等如何保证修改后能保存呢,这里我充分利用了数组的浅拷贝,就是响应式的数据+computed+v-model 修改后依然会修改原数组的值 从而不需要在每行的input都增加@change事件,省了一大堆代码

 

看看chatGPT的解释

 

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

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

相关文章

文旅行业苦“黄牛”久矣,消失的门票到底去哪儿了?

今年年初以来,文化与旅游行业强势复苏,明星演唱会、热门景区及文博科技馆成为了“黄牛党”肆虐的重灾区,高价倒卖票、代抢服务等层出不穷,严重扰乱了文旅票务市场秩序。 如何解决黄牛“顽疾”,成为了文旅行业共同关注…

福布斯发布2023云计算100强榜单,全球流程挖掘领导者Celonis排名17

近日,全球流程挖掘领导者Celonis入选福布斯2023 年云计算 100 强榜单,估值130亿美元,排名第17,Celonis已经是连续三年跻身榜单前20名。 本次榜单由福布斯与Bessemer Venture Partners和Salesforce Ventures联合发布,旨…

GPU虚拟化理解包含直通,k8s安装,GPU-manager

什么是VGPU? vGPU,即真正意义上的GPU虚拟化方案,就是将一块GPU卡的计算能力进行切片,分成多个逻辑上虚拟的GPU,以vGPU为单位分配GPU的计算能力, 并将单块GPU卡分配给多台虚拟机使用,使得虚拟机能够运行3D…

【C++】开源:gflags命令行参数解析库配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍gflags命令行参数解析库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&…

数字孪生工厂分享交流方案[53页PPT]

导读:原文《》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 《“十四五”智能制造发展规划》-----推动数字孪生、人工智能、5G、大数据、区块链、虚拟现…

Linux操作系统安装Nodejs配置淘宝加速教程教程

文章目录 下载软件包配置环境变量重新加载环境变量使其生效配置淘宝加速 下载软件包 从https://nodejs.cn/download/下载所需软件包,也可以复制链接地址在Linux终端中使用wget命令下载,X86设备使用**Linux 二进制文件 (x64)**版本 使用wget命令下载node…

又一个不可错过的编程大模型来了让你惊呼“码农人生”不虚此行

继Stable Diffusion爆火之后,StabilityAI近期又放大招,推出了号称是革命性的编程大模型StableCode。StableCode是其首款用于编码的LLM生成式AI产品,该产品旨在帮助程序员完成日常工作。目前已发布的版本为StableCode-Completion-Alpha-3B&…

10 年 2023 大目标检测模型总结

对象检测示例 “物体检测是计算机视觉中最令人兴奋和最具挑战性的问题之一,深度学习已成为解决这一问题的有力工具。 — 陈良杰博士 OBJECT检测是计算机视觉中的一项基本任务,涉及识别和定位图像中的对象。深度学习彻底改变了对象检测,可以更…

atx2环境搭建

1. 安装python3.9.16版本 Index of /ftp/python/3.9.16/ 在执行该命令前,建议先清理下brew的缓存 brew cleanup 如遇Python环境报错 Run Configuration Error: Please specify a script name 参考:https://blog.csdn.net/weixin_43919570/article/d…

Redis——通用命令介绍

Redis官方文档 redis官方文档 核心命令 set 将key和value存储到Redis中,key和value都是字符串 set key valueRedis中不区分大小写,字符串类型也不需要添加单引号或者双引号 get 根据key读取value,如果当前key不存在,则返回…

opencv基础58 傅里叶变换cv2.dft()->(图像增强、图像去噪、边缘检测、特征提取、图像压缩和加密)

傅里叶变换 是啥? 傅里叶变换是以法国数学家让-巴蒂斯特约瑟夫傅里叶(Jean-Baptiste Joseph Fourier)的名字命名的,以纪念他对这一数学工具的贡献。傅里叶生活在18世纪末和19世纪初,他是一位多才多艺的科学家&#xff…

手撕数据结构之栈+例题

目录 一、栈的概念及结构 二、栈的头文件及基本框架 三、接口实现 1、对栈的初始化 2、栈的销毁 3、入栈操作 4、出栈操作 5、判断栈是否为空 6、返回栈顶元素 7、遍历栈 四、有效的括号 - 力扣(LeetCode) 题目描述: 思路&#xff…

缓存平均的两种算法

引言 线边库存物料的合理性问题是物流仿真中研究的重要问题之一,如果线边库存量过多,则会对生产现场的布局产生负面影响,增加成本,降低效益。 写在前面 仿真分析后对线边Buffer的使用情况进行合理的评估就是一个非常重要的事情。比较关心的参数包括:缓存位最大值…

Kubernetes集群部署(第二篇)

安装flannel Master 节点NotReady 的原因就是因为没有使用任何的网络插件,此时Node 和Master的连接还不正常。目前最流行的Kubernetes 网络插件有Flannel、Calico、Canal、Weave 这里选择使用flannel。 flannel提取链接:https://pan.baidu.com/s/1fLJKh…

GB28181智慧可视化指挥控制系统之执法记录仪设计探讨

什么是智慧可视化指挥控制系统? 智慧可视化指挥控制平台通过4G/5G网络、WIFI实时传输视音频数据至指挥中心,特别是在有突发情况时,可以指定一台执法仪为现场视频监控器,实时传输当前画面到指挥中心,指挥中心工作人员可…

JVM笔记 —— 出现内存溢出错误时时如何排查

一、出现内存溢出的几种情况 内存溢出错误分为StackOverflowError和OutOfMemoryError,前者是栈中出现溢出,后者一般是堆或方法区出现溢出,简称OOM 1. 栈溢出 StackOverflowError 栈溢出一般都是因为没有正确的结束递归导致的,无…

【Pyhthon实战】Python对全校电费查询采集并可视化分析

前言 今天,我来说说怎么抓取宿舍电费的过程。我们学校是在完美校园交电费的,我们可以不用取抓包完美校园的数据接口,我们可以直接登录学校的一卡通网站,每个学校都有,大家可以自己找找,这里我为什么要抓包呢…

新华日报-北京晚报-天津日报-投稿要求

新华日报-北京晚报-天津日报-投稿要求 报纸出版快 稳妥 价优 《中国教育报》1800字符1-3个月见报 《中国教师报》1800字符1-3个月左右见报 《光明日报》普通版 1500字符左右 各科 2个月见报 《经济日报》普通版 1500字符 1-3个月见报 《法治日报》普通版 2000字符 3个月见报…

基于子口袋的分子生成

生成与靶蛋白具有高结合亲和力的分子(也称为基于结构的药物设计,structure-based drug design)是药物发现中的一项基本且具有挑战性的任务。最近,深度生成模型在生成以蛋白质口袋为条件的3D分子方面取得了显著成功。然而&#xff…

怎么绘制乡土中国思维导图?了解一下这个绘制步骤

怎么绘制乡土中国思维导图?乡土中国思维导图是一种将中国传统文化与现代思维方法相结合的思维导图。它是一种系统化的思考方法,可以帮助我们更好地理解乡土中国文化的内涵和特点,同时也能帮助我们更好地应对当下的社会和文化问题。那么今天就…