美文网首页
iOS---性能优化

iOS---性能优化

作者: iOS程序媛ing | 来源:发表于2020-09-14 19:08 被阅读0次

项目中影响性能的主要有一下几方面:卡顿、耗电、网络、启动优化

一、卡顿

造成卡顿的原因是发生vsyn信号时,GPU没有渲染完成。首先我们先了解一下界面渲染
CPU:负责处理事件,对象的创建和销毁、对象的属性设置、布局计算、文本计算、图片的格式转换和解码,图像的绘制。
GPU:负责纹理渲染
解决办法:尽量减少CPU和GPUD的资源消耗。

CPU

  • 不需要与用户交互的情况下,使用CALayer代替UIView
  • 尽量减少修改对象的属性,如frame
  • 图片大小尽量与imageview的大小一致
  • 控制好线程开辟数量
  • 耗时操作放到子线程中:文本计算、图片转码、绘制

GPU

  • 减少离屏渲染(设置圆角、边框等都会离屏渲染)
  • 减少视图数量和层次
  • 尽量不使用透明视图(alpha <0.01)
  • 尽量避免段时间内显示大量图片
离屏渲染

GPU有两种渲染方式
当前渲染:在当前缓冲区渲染。
离屏渲染:在当前屏幕缓冲区外另外开辟一块缓冲区渲染。
离屏渲染耗费性能的原因:
离屏渲染需要从当前屏幕离屏,渲染结束后需要将渲染结果从离屏带回当前屏幕显示,离屏到回到当前屏幕非常消耗性能;

卡顿检测

可以通过监测runloop从进入等待到重新唤起的时间间隔,判断是否卡顿

二、耗电

耗电的主要来源有:

  • 定位
  • 网络请求
  • 图像渲染
  • CPU
耗电优化
  • 定位
    • 在不需要定位的情况下关闭定位,
    • 如果只是需要快速定位用户,用 CLLocationManager 的 requestLocation 方法定位,定位完成后,定位硬件会自动断电;
      -若不是导航应用,尽量不要实时更新位置,并为完毕就关掉定位服务;
      尽量降低定位精度,如不要使用精度最高的 KCLLocationAccuracyBest;
      需要后台定位时,尽量设置 pausesLocationUpdatesAutomatically 为 YES,若用户不怎么移动的时候,系统会自暂停位置更新;
  • 网络请求:
    • 设置合理的超时时间;
    • 允许用户取消长时间不响应的网络请求;
    • 使用缓存;
    • 网络不可用时,不进行网络请求;
    • 批量下载或传输;

相关文章

  • iOS---性能优化

    项目中影响性能的主要有一下几方面:卡顿、耗电、网络、启动优化 一、卡顿 造成卡顿的原因是发生vsyn信号时,GPU...

  • Android性能优化 - 消除卡顿

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化 - 内存优化 性能分析工具 - Tra...

  • Android性能优化 - 内存优化

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化- 内存优化 性能分析工具 - Trac...

  • 前端性能优化(中)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(上)...

  • 前端性能优化(下)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(中)...

  • Awesome Extra

    性能优化 性能优化模式 常见性能优化策略的总结 Spark 性能优化指南——基础篇 Spark 性能优化指南——高...

  • 常用的后端性能优化六种方式:缓存化+服务化+异步化等

    性能优化专题 前端性能优化 数据库性能优化 jvm和多线程优化 架构层面优化 缓存性能优化 常用的后端性能优化六大...

  • webpack 性能优化

    webpack性能优化 开发环境性能优化 生产环境性能优化 开发环境性能优化 优化打包构建速度 优化调试功能 生产...

  • iOS性能优化 - 整理

    本文主要包含: 性能优化 - 卡顿性能优化 - 耗电优化性能优化 - APP启动优化安装包瘦身 一  性能优化 -...

  • 【React.js 20】React性能优化

    React性能优化 React性能优化主要分三块: React 组件性能优化 属性传递优化针对单组件性能优化,很多...

网友评论

      本文标题:iOS---性能优化

      本文链接:https://www.haomeiwen.com/subject/tnsnektx.html