解决前端js,处理上万条数据的渲染,加载卡顿的问题 |
您所在的位置:网站首页 › 浏览器加载数据出错 › 解决前端js,处理上万条数据的渲染,加载卡顿的问题 |
应用背景
去年五月刚进公司,同事让我尝试处理网页数据渲染卡顿的问题。问题是这样:页面样式类似tab面板切换,按照分类一次性把上万条数据渲染上去,你鼠标往下滚动,表格数据一卡一卡的,几乎动不了。(==!本来做成分页就不会有这种问题,只是同事跟我说这项目的前端是外包出去的,如果要改样式,要写研发申请单,可能自己直接在js上处理数据比较快) 样式参考下图 看了一些文章,后来在知乎上找到【陈大侠】一篇比较明朗的,链接:转知乎 文章思路:获取后端回调的上万条数据后,存在js里,做分组处理。然后在for遍历方法体中使用setTimeout让程序每隔1ms渲染一次,强制“休息”1ms。 这样的效果页面数据的渲染虽然顺畅了,但也仅是前面的数据,鼠标越往下滚动,表格数据还是会卡顿。 这里我在文章里原来的基础上做了改动,让表格的数据,根据鼠标滚动(滚动高度/表格高度的整数比)来分批次加载。 代码如下: //数据分组 function group(data) { var result = []; var groupItem; for (var i = 0; i < data.length; i++) { if (i % 100 == 0) { !groupItem && result.push(groupItem); groupItem = []; } groupItem.push(data[i]); } result.push(groupItem); return result; }首先,上面代码将后端返回的数据进行分组,比如我这里设定每组100条记录。然后进行渲染,如下: //遍历、渲染的通用函数 function loadGroup(ar7_tab,group){ group.forEach((k,v) => { let tr = ' \n' + ' \n' + ' ' + k.reportMes + '\n' + ' ' + repalceDeviceName(k.deviceName)+ '\n' + ' ' + repalceReportType(k.reportType)+ '\n' + ' ' + k.creatOn + '\n' + ' \n' + ' ' + alarmDict[k.solve] + '\n' + ' \n' + ' \n'; let $tr = $(tr); if (!!alarmTitle&&alarmTitle.id_record&&k.id_record == alarmTitle.id_record) { $tr.addClass("ar7-point"); } ar7_tab.append($tr); }); } function rerendAlarmTab(ar7_tab ,data ) {//数据渲染主函数 ar7_tab.append(''); var groups = group(data); //将后端接收到的数据按100条为单位,进行分组 loadGroup(ar7_tab,groups[0]);//页面加载的首批渲染 //鼠标滚动 $('#ar7-tab').scroll(function(){ //鼠标滚动的高度 >表格固定高度时 if($(this).scrollTop() >= $(this).height()){ let countT=$(this).scrollTop()/$(this).height(); countT=countT.toString().split(".")[0];//取整数倍数(高度比) //鼠标不往回滚(鼠标回滚数据不继续加载) && 小于数据组总长度(未加载完) if(parseInt(countT)>parseInt($('#countC').val()) && parseInt(countT) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |