iOS界面性能优化

前言

性能优化在一些小公司开发都不被重视,只要功能能用就OK了,一旦用户量大或者数据量大就承受不了.在大厂非常重视性能优化,因此我们开发时,注意代码规范和性能的问题.

界面卡顿原因

卡顿解析图.jpg

从图中可以看到,页面显示需要CPU和GPU共同参与才能显示,其中VSync是垂直渲染.CUP负责视图的创建、布局计算、图片解码.。随后 CPU 会将计算好的内容提交到 GPU 去,由 GPU 进行变换、合成、渲染。当CPU和GPU没有将处理结果提交,就会导致页面一直停留在原来的页面,等待再次显示.

优化的策略

1.CPU任务的优化

a.布局计算
  尽量简化布局,提前计算好布局,减少不必要的界面更新
  
b.对象创建
  使用轻量级对象,例如:采用纯代码构建页面,用xib会进行反序列化,导致内存占用
  对于列表优化采用重用机制进行渲染
  列表的性能优化
c.Autolayout:
  平时业务不复杂可以使用autolayout,但是业务复杂时需要采用手动布局,控制好刷新频率
d.文本计算
   优化计算算法,提前计算布局
f.文本渲染
  静态文本我们应该尽量减少它所在视图的布局修
改
g.图像的绘制
   尽量减少图片的绘制,业务需要时,将图片绘制放到后台程进行处理,最终设置到layer的content中

- (void)display {
 dispatch_async(backgroundQueue, ^{
   CGContextRef ctx = CGBitmapContextCreate(...);
   // draw in context...
   CGImageRef img = CGBitmapContextCreateImage(ctx);
   CFRelease(ctx);
   dispatch_async(mainQueue, ^{
     layer.contents = img;
   });
 });
}

f.图片的解码
  图片解码可以放到后台进行解码,也可以通过RunLoop的空闲状态中进行解码

2.GPU任务的优化
接收提交的纹理(Texture)和顶点描述
(三角形),应用变换(transform)、混合并渲染,然后输出到屏幕上。

a.视图优化
   减少不必要的透明视图,减少大图的加载,将多张图片合成一张
b.离屏渲染
  是 GPU 在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。
  离屏渲染导致性能下降原因:
  阴影,圆角,图层蒙板,开启光栅化
  例如:CALayer的属性设置为shouldRasterize,就开启了光栅化,光栅    
  化也会带来一定的性能损耗,可以用 CoreGraphics 将图片处理成 
  圆角来避免

列表的性能优化点

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