项目中影响性能的主要有一下几方面:卡顿、耗电、网络、启动优化
一、卡顿
造成卡顿的原因是发生vsyn信号时,GPU没有渲染完成。首先我们先了解一下界面渲染
CPU:负责处理事件,对象的创建和销毁、对象的属性设置、布局计算、文本计算、图片的格式转换和解码,图像的绘制。
GPU:负责纹理渲染
解决办法:尽量减少CPU和GPUD的资源消耗。
CPU
- 不需要与用户交互的情况下,使用CALayer代替UIView
- 尽量减少修改对象的属性,如frame
- 图片大小尽量与imageview的大小一致
- 控制好线程开辟数量
- 耗时操作放到子线程中:文本计算、图片转码、绘制
GPU
- 减少离屏渲染(设置圆角、边框等都会离屏渲染)
- 减少视图数量和层次
- 尽量不使用透明视图(alpha <0.01)
- 尽量避免段时间内显示大量图片
离屏渲染
GPU有两种渲染方式
当前渲染:在当前缓冲区渲染。
离屏渲染:在当前屏幕缓冲区外另外开辟一块缓冲区渲染。
离屏渲染耗费性能的原因:
离屏渲染需要从当前屏幕离屏,渲染结束后需要将渲染结果从离屏带回当前屏幕显示,离屏到回到当前屏幕非常消耗性能;
卡顿检测
可以通过监测runloop从进入等待到重新唤起的时间间隔,判断是否卡顿
二、耗电
耗电的主要来源有:
- 定位
- 网络请求
- 图像渲染
- CPU
耗电优化
- 定位
- 在不需要定位的情况下关闭定位,
- 如果只是需要快速定位用户,用 CLLocationManager 的 requestLocation 方法定位,定位完成后,定位硬件会自动断电;
-若不是导航应用,尽量不要实时更新位置,并为完毕就关掉定位服务;
尽量降低定位精度,如不要使用精度最高的 KCLLocationAccuracyBest;
需要后台定位时,尽量设置 pausesLocationUpdatesAutomatically 为 YES,若用户不怎么移动的时候,系统会自暂停位置更新;
- 网络请求:
- 设置合理的超时时间;
- 允许用户取消长时间不响应的网络请求;
- 使用缓存;
- 网络不可用时,不进行网络请求;
- 批量下载或传输;
网友评论