我对离屏渲染的理解

2018-09-04  本文已影响14人  Dravenn

关于离屏渲染

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

问题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需谨慎

上一篇 下一篇

猜你喜欢

热点阅读