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

【前端】处理一次性十万条数据渲染方案(不考虑后端分页)

文章目录

    • 一、定时渲染
    • 二、触底加载

一、定时渲染

  • 思路:定时加载,分堆处理
1. 例如,前端请求到十五条数据以后,先不直接渲染,而是将这些数据分堆分批次渲染
2. 比如,一堆放10条数据,十万条数据就是一万堆
3. 然后使用定时器一次渲染一堆,渲染一万次即可
  • 核心实现
// 渲染到页面表格的数据
let pagedata = [];
const plan = async () => {// 例如 bigdata 是接口请求到的十万条数据const bigdata = await getBigDat();// 分堆处理let arr = average(bigdata)// 渲染数据for(let i=0; i<arr.length; i++){setTimeout(()=>{pagedata = [...pagedata, ...arr[i]]},20*i)}
}
const average = (arr) => {let i = 0;let res = [];while(i < arr.length){// 一堆截取10条数据res.push(arr.slice(i, i+10));i = i+10;}return res;
}
  • 优化掉帧:requestAnimationFrame

由于定时器设置了间隔时间,当数据滚动较快,会导致页面渲染跟不上,从而出现掉帧现象

// 渲染到页面表格的数据
let pagedata = [];
const plan = async () => {// 例如 bigdata 是接口请求到的十万条数据const bigdata = await getBigDat();// 分堆处理let arr = average(bigdata)// 渲染数据useData(0);
}
const useData = (index)=>{if(index > arr.length -1){return}// 用动画请求帧优化requestAnimationFrame(()=>{pagedata = [...pagedata, ...arr[index]]index = index + 1;// 递归调用useData(index)})
}
const average = (arr) => {let i = 0;let res = [];while(i < arr.length){// 一堆截取10条数据res.push(arr.slice(i, i+10));i = i+10;}return res;
}

二、触底加载

  • 在vue中需要使用到饿了么的一个插件包el-table-infinite-scroll【官方文档】

  • 安装插件

npm install --save el-table-infinite-scroll
  • 引用插件
import Vue from 'vue';
import elTableInfiniteScroll from 'el-table-infinite-scroll';Vue.use(elTableInfiniteScroll)
  • 使用插件
<el-table:data="tabledata"v-el-table-infinite-scroll="load"
>
</el-table>
  • 核心代码
// 渲染到页面表格的原始数据
let pagedata = [];
// 渲染到页面表格的实时数据
let tabledata = [];
const plan = async () => {// 例如 bigdata 是接口请求到的十万条数据const bigdata = await getBigDat();// 分堆处理pagedata = average(bigdata)// 渲染数据load()
}
const load = (arr) => {if(pagedata.length === 0){return;}// 加载的时候,把pagedata数组的第一项取出来,拼接到展示的表格数据上let arr = pagedata[0]tabledata = tabledata.concat(arr);// 拼接完成后,再把pagedata数组的第一项删除即可pagedata.shift()
}
const average = (arr) => {let i = 0;let res = [];while(i < arr.length){// 一堆截取10条数据res.push(arr.slice(i, i+10));i = i+10;}return res;
}
http://www.lryc.cn/news/317089.html

相关文章:

  • WPS 云文档保存在本地的地址如何从c盘更改为其他盘?
  • 每日leetcode--接雨水
  • redis 性能优化一
  • 柔性数组(变长数组)介绍
  • AMS、PMS和WMS学习链接
  • typedef 在枚举类型enum的使用方式
  • DDD领域模型驱动
  • 基于pytest的证券清算系统功能测试工具开发
  • 土地利用数据分类过程教学/土地利用分类/遥感解译/土地利用获取来源介绍/地理数据获取
  • 图【数据结构】
  • 整块代码自动生成、智能括号匹配……CodeGeeX编程提效,功能再升级!
  • java实现计算ROUGE-L指标(一)
  • LLM之RAG实战(二十九)| 探索RAG PDF解析
  • C while 和 do while 区别
  • 力扣每日一题 在受污染的二叉树中查找元素 哈希 DFS 二进制
  • 安卓Java面试题 91- 100
  • BM1684X搭建sophon c++环境
  • UDP通讯测试
  • Linux - 进程间通信
  • 代码随想录算法训练营第七天|454. 四数相加 II
  • 蓝桥杯刷题(五)
  • mysql语句中想要查询某一月每一天日期的平均值 ,SSM框架如何实现
  • 前端框架的发展历程
  • 【LeetCode 算法专题突破】---二分查找(⭐⭐⭐)
  • 一个简单的HTML 个人网页
  • 【SpringCloud微服务实战05】Feign 远程调用
  • LiveGBS流媒体服务器中海康摄像头GB28181公网语音对讲、语音喊话的配置
  • 【前端】尚硅谷Webpack教程笔记
  • Java泛型使用及局限
  • Sklearn线性回归