减少重绘回流:
使用变量缓存dom节点,不要频繁读取。
通过DocumentFragment或innerHTML批量操作dom
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和内存使用量。
移动端硬件加速,触发GPU渲染,还是translate3d(0,0,0)
-
uniapp页面结构复杂,css样式太多的情况,使用 image 可能导致样式生效较慢,出现 “闪一下” 的情况,此时设置 image{will-change: transform} ,可优化此问题。
其实并不是这样,image的宽度有一个默认宽度,等到样式