离屏渲染概念
离屏渲染,根据字面意思理解,就是脱离屏幕的渲染,渲染的结果不会直接呈现到当前屏幕上,而是等待时机才会被显示
正常情况,在当前屏幕显示的内容,由GPU渲染完成后放到当前屏幕的帧缓存区,不需要额外的渲染空间。iphone的屏幕刷新率是60HZ,每隔一段时间就会从帧缓冲区读取一次数据显示到当前屏幕上
当GPU遇到性能瓶颈,导致无法在一帧内更新渲染结果到帧缓存区,此时屏幕刷新从帧缓存区读取到的还是上一帧的内容,表现出界面卡顿的效果
为了解决上面出现的情况,避免因为界面布局复杂导致GPU渲染性能出现问题,导致界面卡顿的情况,Apple引入了离屏渲染的机制,它会处理比较消耗性能的视图提前渲染
如何触发离屏渲染
GPU渲染没有办法做到一步到位,就会触发离屏渲染
1、圆角
2、阴影
3、遮罩
4、背景色
5、透明度
离屏渲染的弊端
离屏渲染需要在内存中单独开辟一段内存空间,提前使用GPU渲染复杂的视图,保证能够及时地从缓存区读取最新的渲染结果。其实离屏渲染是让CPU帮助GPU处理了一部分事情,减轻GPU的压力。屏幕要想读取离屏渲染的结果,需要在当前屏幕缓存区和离屏渲染缓存区来回切换,这样也会产生系统开销,间接的降低了App的性能
在tableview或者collection中,滚动的每一帧变化都会触发每个cell的重新绘制,一旦出现离屏渲染,上下文不停的切换,每秒发生60次,这样会大大降低GPU的渲染性能
如何优化离屏渲染
1、使用cornerRadius设置了圆角,尽量不设置背景色,尽量不给borderWidth赋值
2、能够用圆角图片就别用cornerRadius设置圆角
3、设置阴影,使用shadowPath来规避离屏渲染
4、复杂、复用度高的视图,使用layer mask并打开shouldRasterize来对渲染结果进行缓存
5、设置layer的opaque为YES,减少复杂图层合成
6、尽量使用不包含透明通道的图片资源(alpha<1)
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/89941.html