我对离屏渲染的理解

关于离屏渲染

一直觉得很多离屏渲染的文章说得不明不白。

问题1:离屏渲染是时刻存在着,还是页面滚动的时候才存在着。

看了很多文章,结合instrument测试fps谈谈我的理解。

instrument测试fps的时候,只有滑动scrollView的时候,fps才会大于0,不滑动的时候fps等于0。我把这特性理解为:只有屏幕显示的内容是动态的时候,GPU才会渲染。渲染又分屏幕渲染和离屏渲染,离屏渲染耗费的性能要更大,因为要创建一个新的缓冲区,并进行上下文切换(这两步才是最耗性能的两步),所以过多的离屏渲染操作(例如cornerRadius+masksToBounds操作)就会产生卡顿。所以我理解为离屏渲染是在页面内容在刷新的时候(例如滑动scrollView、tableview.reloadData,DrawRect绘制等操作)才存在着。

然后,当设置shouldRasterizep属性为YES的时候,耗时的图层绘制会被缓存,如果对应的layer及其sublayers没有发生改变,在下一帧的时候可以直接复用。

问题来了,如果页面不滚动,fps等于0,就不会有下一帧,缓存就用不上,那么我缓存的图层有什么用?后来我想明白了,例如tableview.reloadData,DrawRect等方法重新绘制页面,刷新页面,如果对应的layer及其sublayers没有发生改变,就能使用缓存,如果改变了,就会再生缓存,反而加大性能的损耗。所以设置shouldRasterizep属性为YES需谨慎

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容