博客> 表格性能优化的离屏渲染和栅格化
表格性能优化的离屏渲染和栅格化
2018-11-09 23:56 评论:0 阅读:745 逐小白
ios 表格性能优化

高级优化: 1.离屏渲染: 最近关于离屏渲染问题的文章随处可见,对于一个小白来讲,可能去理解其中的原理是比较困难的。看了很多文章后,我也就是对离屏渲染有一点了解,在此做一个总结,直接说说我们平时应该怎样对待离屏渲染问题。观点基于个人理解水平,如有误区,我真诚地请大牛们指正。 对于我们通常用到的圆角图片,比如UIImageView这种,使用系统圆角虽然会触发离屏渲染,但是单价相对来说,是可以接受的。 如果我们希望在滚动视图,例如UITableView、UIScrollView等视图,我们应该尽可能的去避免触发离屏渲染。 如果我们使用了大量的圆角图片,也应该避免触发离屏渲染。 至于如何避免触发离屏渲染,大致有以下几种可行方案: 通过设置shouldRasterize = YES,会使视图渲染内容被缓存起来,下次绘制的时候可以直接显示缓存,当然要在视图内容不改变的情况下,其实我们应该把shouldRasterize用在确定不会改变的地方,否则将会导致大量的离屏渲染发生。因为shouldRasterize相当于手动开启了离屏渲染。 采取预先生成圆角图片,并缓存起来这个方法才是比较好的手段。预处理圆角图片可以在后台处理,处理完毕后缓存起来,再在主线程显示,这就避免了不必要的离屏渲染了。GitHub上有这一类的库:HJCornerRadius、NZCircularImageview 在图片上面覆盖一个镂空圆形图片的方法可以实现圆形头像效果,这个也是极为高效的方法。缺点就是对视图的背景有要求,单色背景效果就最为理想。

2.栅格化: 代码: self.layer.shouldRasterize = true // 栅格化 self.layer.rasterizationScale = UIScreen.main().scale // 栅格化要和设置屏幕分辨率一起,否则会模糊不清; 原理: 异步绘制之后,会生成一张独立的图像,设置了栅格化之后,cell在屏幕上滚动的时候,本质上是滚动图片,此时不可交互;只有停止滚动才显示成可交互的原始表格.

如果监测到cell的性能已经很好(刷新频率大于40或无卡顿现象),就不需要离屏渲染和栅格化,因为这需要在GPU/CPU之间来回切换,耗电会很厉害.

另外:性能优化都是针对layer层,view主要负责交互,layer负责显示

收藏
1
sina weixin mail 回到顶部