文章目录
一、定时渲染
- 思路:定时加载,分堆处理
1. 例如,前端请求到十五条数据以后,先不直接渲染,而是将这些数据分堆分批次渲染
2. 比如,一堆放10条数据,十万条数据就是一万堆
3. 然后使用定时器一次渲染一堆,渲染一万次即可
- 核心实现
// 渲染到页面表格的数据let pagedata =[];constplan=async()=>{// 例如 bigdata 是接口请求到的十万条数据const bigdata =awaitgetBigDat();// 分堆处理let arr =average(bigdata)// 渲染数据for(let i=0; i<arr.length; i++){setTimeout(()=>{
pagedata =[...pagedata,...arr[i]]},20*i)}}constaverage=(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 =[];constplan=async()=>{// 例如 bigdata 是接口请求到的十万条数据const bigdata =awaitgetBigDat();// 分堆处理let arr =average(bigdata)// 渲染数据useData(0);}constuseData=(index)=>{if(index > arr.length -1){return}// 用动画请求帧优化requestAnimationFrame(()=>{
pagedata =[...pagedata,...arr[index]]
index = index +1;// 递归调用useData(index)})}constaverage=(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
【官方文档】 - 安装插件
npminstall--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 =[];constplan=async()=>{// 例如 bigdata 是接口请求到的十万条数据const bigdata =awaitgetBigDat();// 分堆处理
pagedata =average(bigdata)// 渲染数据load()}constload=(arr)=>{if(pagedata.length ===0){return;}// 加载的时候,把pagedata数组的第一项取出来,拼接到展示的表格数据上let arr = pagedata[0]
tabledata = tabledata.concat(arr);// 拼接完成后,再把pagedata数组的第一项删除即可
pagedata.shift()}constaverage=(arr)=>{let i =0;let res =[];while(i < arr.length){// 一堆截取10条数据
res.push(arr.slice(i, i+10));
i = i+10;}return res;}
标签:
前端
本文转载自: https://blog.csdn.net/qq_45677671/article/details/136554257
版权归原作者 一颗不甘坠落的流星 所有, 如有侵权,请联系我们删除。
版权归原作者 一颗不甘坠落的流星 所有, 如有侵权,请联系我们删除。