前言

最近公司项目快结项了,但是我发现公司的每个页面打开都比较卡,究其原因数据量大,请求多,渲染慢。加之面试的时候也遇到过此类问题,那么今天就来尝试去实现一下。

一、整理思路

首先我们要知道js处理大量数据并没有花费多长时间。耗时最长的是渲染dom元素。一次加载完需要耗费大量时间,所以我们可以把数据切割成一个个小块。每次渲染一小块就能够将dom渲染出来了。

二、代码实现

<ul></ul>
// 第一种实现方式
const $UL = document.querySelector('ul')
let size = 0
const myList = getList()// 生成数据
function getList() {let list = []for (let i = 0; i < 5005000; i++) {list.push(i)}return list
}function render(list) {let tempBox = document.createDocumentFragment()list.map(function (data) {let li = document.createElement('li')li.innerHTML = datatempBox.appendChild(li)})$UL.append(tempBox)
}function splitList() {if (size + 100 < myList.length) {render(myList.slice(size, size + 100))size += 100requestAnimationFrame(splitList)} else {render(myList.slice(size, size + myList.length - size))size = myList.length - size}
}requestAnimationFrame(splitList)

可能有些同学没用过[requestAnimationFrame],(https://developer.mozilla.org/zh-CN/docs/Web/API/Window/requestAnimationFrame),建议先去了解一下,当然你也可以用计时器来代替,不写也是可以的。

三、优化代码

虽然上诉方式已经将渲染时间缩短了,但是我们想要的效果是,需要的时候再渲染这个元素,不需要/被隐藏的元素就不渲染。那么这该怎么实现呢,首先我们去监听进度条,根据进度条滚动的距离,渲染dom,那么上诉代码就会变成如下样子。

<ul style="overflow: auto; height:400px;"></ul>
const $UL = document.querySelector('ul')
let page_arg = {size: 0,count: 100,
}const myList = getList()
$UL.onscroll = function () {if (this.scrollTop + this.clientHeight + 10 >= this.scrollHeight) {splitList()}
}// 生成数据
function getList() {let list = []for (let i = 0; i < 10000000; i++) {list.push('我是数据'+i)}return list
}function render(list) {let tempBox = document.createDocumentFragment()list.map(function (data) {let li = document.createElement('li')li.innerHTML = datatempBox.appendChild(li)})$UL.append(tempBox)
}function splitList() {render(myList.slice(page_arg.size, page_arg.size + page_arg.count))page_arg.size += page_arg.count
}splitList()

总结

写到这里渲染数据列表的问题就算是结束了,如果有什么地方写的不对,或者还能优化的地方还请各位大佬指出来,毕竟我也是第一次尝试渲染这么多数据,代码在这里,各位也可以自己去尝试一下。其实还可以在优化一下这个计算的时间,可以使用web Worker多开一个线程来协助计算,再次将js的计算时间压缩,不过对我来说已经足够了,对于追求性能的同学可以去尝试一下。然后分享一下自己的心得。嘿嘿,ok,这篇博客就到此为止了,谢谢各位的支持,有问题请私信我。

js渲染10万数据列表,不阻塞UI相关推荐

  1. 为何插入10万数据只需2秒

    文章目录 一.前言 二.问题 1.url后面useServerPrepStmts是什么? 2.url后面rewriteBatchedStatements是什么? 3.这两个参数对语句执行有什么影响? ...

  2. php 导出excel分段导出_php 导出excel 10万数据

    php导出excel 10万数据(此代码主要测试用,没写单元测试 还在修改中 后期加上单元测试) 在工作当中要对一些基本信息和其他信息导出 起初信息比较小无所谓.... 但当信息超出65535的时候 ...

  3. leaflet大量marker卡顿_leaflet如何加载10万数据

    作为一名GIS开发者,你工作中一定遇到过这种问题,根据业务设计,需要在地图上添加1万+条数据,数据或是点.或是线.或是面.但不管哪种,当你添加到5000条时,地图操作就会出现明显的卡顿.当你添加超过1 ...

  4. js 渲染十万条数据卡顿优化方法。请求帧渲染

    函数: 1.window.requestAnimationFrame(callback) callback:下一次重绘之前更新动画帧所调用的函数(即上面所说的回调函数). 作用:告诉浏览器--你希望执 ...

  5. 爬取B站10万数据,看看都有哪些热门的UP主

    要点: - 爬取10万用户数据 - 数据存储 - 数据词云分析 1.准备阶段 写代码前先构思思路:既然我要爬取用户关注的用户,那我需要存储用户之间的关系,确定谁是主用户,谁是follower. 存储关 ...

  6. 调研3家学校,分析10万数据,发现有了大数据再也不用“清考”

    今天看到了一篇新闻,让小编我惊出了一身冷汗,还好我毕业早: "清考"就是学校为了保证毕业率,在毕业前为那些还有课程挂科的学生一次补考的机会,而且补考比较容易通过." 通知 ...

  7. 数据库超10万数据导出Excel

    ps: 首先科普一下基础知识 Excel 2003及以下的版本.一张表最大支持65536行数据,256列.也就是说excel2003完全不可能满足百万数据导出的需求. Excel 2007-2010版 ...

  8. 广西行政村数据shp_广西自治区乡镇行政区划数据 精度1:10万

    原标题:广西自治区乡镇行政区划数据 精度1:10万 数据简介 行政区划是国家为了进行分级管理而实行的区域划分.中国现行六级行政区,即省级.地级.县级.乡级.村级.组级,其中省.县.乡三级为基本行政区. ...

  9. 300万数据的导入导出

    进入了一个公司实习,要求自己写一个基于spring boot,用JPA实现的增删改查的小项目,前台用bootstrap,期间叫我们研究一下vue.js.第一次听说这个js框架的时候没有什么概念,只知道 ...

最新文章

  1. 基于HTML5的电信网管3D机房监控应用
  2. HDU2544 最短路(模版题dijkstra/floyd/spfa)
  3. 64位windows7配置32位odbc
  4. python3 类的一个实例
  5. 数据库SQL ServerSQL Server教程:详细学习游标
  6. 基于TableStore的数据采集分析系统介绍 1
  7. stats | 数据降维之主成分分析(PCA)
  8. 使用WITH AS提高性能简化嵌套SQL
  9. c++最小的引用()demo
  10. 编程成长日记——折半查找
  11. 梦记录:1204(梦到观世音菩萨像)
  12. 程序员代码大全c语言,程序员大神教你,新手零基础学C语言编程代码训练
  13. rose ha 的使用
  14. Java基础之《JDK文档》
  15. Cygwin、Msys、MinGW、Msys2的区别与联系
  16. python文件下载
  17. C++语言程序设计第五版 - 郑莉(第六章课后习题)
  18. OWASP ZAP安全测试工具使用教程(初级)
  19. Pandas+Pyecharts | 2022年世界500强数据分析可视化
  20. 计算机应用程序没声音,电脑如何关闭某个应用程序的声音

热门文章

  1. [转]linux grep命令的使用
  2. 机器学习笔记--PR曲线和ROC曲线
  3. 追踪社保基金操盘者的足迹
  4. 美国软件和菜头——《软件随想录》读后感
  5. python爬虫网易云音乐评论再分析_Scrapy爬取网易云音乐和评论(一、思路分析)...
  6. Machine Learning Approach to RF Transmitter Identification
  7. 弘辽科技:如何快速提升抖音小店
  8. 我的通宵史-网上斗地主谋生
  9. 基于51单片机的多路多点温度检测两种供电方式proteus仿真原理图PCB
  10. 基于单片机烟雾及温度报警器-火灾监测-毕设课设资料