前端渲染几十万条数据不卡顿
渲染大数据时,合理使用createDocumentFragment和requestAnimationFrame,将操作分为一小段执行.
createDocumentFragment()方法
- 用来创建一个虚拟的节点对象,或者说说是用来创建文档碎片节点,可以包含各种类型的节点,在创建之初是空的.
- 创建的节点不属于文档树,继承的parentNode属性总是null,当请求把一个DocumentFragment节点插入文档树,插入的不是DocumentFragment自身,而是它的子孙节点,插入的是括号里的节点.它有利于实现文档的剪切,复制和粘贴.
- 当需要添加多个dom元素时,如果先将这些元素添加到DocumentFragment中,在统一将DocumentFragment添加到页面,会减少页面渲染dom的次数,效率会明显提升.
requestAnimationFrame
requestAnimationFrame比起setTimeout,setInterval的优势主要是两点:
- requestAnimationFrame会把每一帧中的所有dom操作集中起来,在一次重绘和回流中完成,并且重绘或回流的时间间隔紧紧会随浏览器的刷新频率,一般来说频率为每帧60秒
- 在隐藏不可见元素中,requestAnimationFrame将不会进行重绘或回流.有更少的cpu,gpu和内存使用量.
<body>
<ul></ul>
<script>
const total = 100000