渲染优化


减少重绘回流:

  1. 使用变量缓存dom节点,不要频繁读取。

  2. 通过DocumentFragment或innerHTML批量操作dom

  3. dom隐藏,或复制到内存中,类似vitual dom,进行修改,完成后再替换回去

    • 动画元素一定要absolute,脱离文档流,不影响其他元素,动画不要用left,top等操作,要使用transform和opacity,同时开启渲染层(will-change或translate3d(0,0,0))
    • 动画尽量用requestAnimationFrame(直接用,和定时器差不多但是比较丝滑),不要用定时器

requestAnimationFrame 比起 setTimeout、setInterval的优势主要有两点:
1、requestAnimationFrame 会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率,一般来说,这个频率为每秒60帧。
2、在隐藏或不可见的元素中,requestAnimationFrame将不会进行重绘或回流,这当然就意味着更少的的cpu,gpu和内存使用量。

  1. 移动端硬件加速,触发GPU渲染,还是translate3d(0,0,0)

  2. 使用-will-change

    uniapp页面结构复杂,css样式太多的情况,使用 image 可能导致样式生效较慢,出现 “闪一下” 的情况,此时设置 image{will-change: transform} ,可优化此问题。
    其实并不是这样,image的宽度有一个默认宽度,等到样式


文章作者: iamfugui
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 iamfugui !
评论