工作中解决过如题的问题,4万条数据需要瞬间渲染到页面上,趁最近需要,重新整理一遍
第一次优化采用了数据分组分多次渲染的方法,能迅速渲染上一组数据,达到很好的初始视觉效果,但是总的dom元素数量还是一样庞大,当渲染完所有dom,滑动时还是会卡顿。
所以在更高要求下还是要用虚拟滚动,写在了下一篇。本篇就把分组简单的附上代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> <script> let data = [] for(let i = 0; i < 200000; i ++) { data.push(i+1) } let partArr = [] let resultArr = [] for(let i = 0; i < data.length; i ++) { if((i+1) % 1000 == 0 && i+1 != data.length) { resultArr.push(partArr) partArr = [] } partArr.push(data[i]) if(i+1 == data.length) resultArr.push(partArr) } function render(arr) { let frag = document.createDocumentFragment() for(let i = 0; i < arr.length; i ++) { let p = document.createElement('p') p.innerHTML = arr[i] frag.appendChild(p) } document.body.appendChild(frag) } for(let i = 0; i < resultArr.length; i ++) { setTimeout(() => { render(resultArr[i]) }, 50); } </script> </html>
|