工作生活

iOS开发系列之性能优化

2019-07-04  本文已影响0人  zmfflying

本篇主要记录一下我对界面优化、时间优化和耗电优化、安装包瘦身上的一些探索。我尽量按照自己的理解来进行描述,如有不当,欢迎指正。

一、界面优化

1、卡顿原理

要了解卡顿原理,需要对帧缓冲区、垂直同步、CPU 和 GPU 几个词进行一下了解,然后综合起来,就可以得到卡顿的答案。

1.1、帧缓冲区

听起来很高大上,其实就是用来存放每一帧画面数据的一个 “仓库”,一个仓库只存放一帧画面的数据,iOS 一直是双缓存,就是有两个仓库,存当前帧数据的叫 “正式仓库”,存下一帧数据的叫 “预备仓库”。

当正式仓库的数据被取走后,两者身份交换,原来的预备仓库转正为正式仓库,原来的正式仓库变成预备仓库。

1.2、垂直同步 (VSync)

就是一个“信号”,通知 APP 该开始准备往预备仓库里存放数据了,系统过一会就要来取,这个时间大概是 16.7 毫秒。

1.3、CPU (中央处理器)

主要的工作有:正式对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制。我们可以理解为负责包裹内部的处理工作,简称 “打包”。

1.4、GPU (图形处理器)

主要的工作有:将 CPU 计算好的内容进行变换、合成、渲染等处理,然后将渲染结果提交到帧缓冲区。我们可以理解为,对 CPU 给过来的包裹进行分类、排列等操作后,存放到仓库里去,简称 “入库”。

1.5、卡顿原理

当收到系统发过来的 VSync “信号”后,CPU 就开始对这一帧画面的数据进行 “打包”,然后交给 GPU 进行 “入库” 操作,存入到 “预备仓库” 中。

16.7 毫秒后,预备仓库转正,系统开始读取仓库里的数据,如果这个时候,仓库中的数据还没有准备好,那么系统就会大发雷霆,放弃读取仓库中的数据。

那么这个时候,因为系统的宁缺毋滥,导致了显示器上显示的还是上一帧画面,就造成了卡顿的效果。

2、优化

作为软件开发工程师的我们,既不能延长 16.7 毫秒的处理时间,也不能改变系统的脾气,那我们能做的就是尽量在这个时间内完成数据的准备。要么 “打包” 快一点,要么 “入库” 快一点,也就是针对 CPU 和 GPU 的工作进行优化,这就是性能优化的工作了。

2.1、CPU 工作之正式对象的创建和销毁

2.2、CPU 工作之对象属性的调整

2.3、CPU 工作之布局计算

2.4、CPU 工作之文本的计算和排版

2.5、CPU 工作之图片的格式转换和解码

2.6、CPU 工作之图像的绘制

2.7、GPU 工作之渲染

二、时间优化

要谈论时间优化,就要先了解程序启动的过程和耗时的原因,然后针对性的进行优化。

1、程序启动过程

程序的启动分为冷启动和热启动两种模式,其中冷启动是从程序被杀死后加载起来的过程,热启动是从后台到前台的过程。相比之下,热启动是包含在冷启动里,并且比冷启动少了部分加载过程的,所以,我们平常说的启动优化,一般都是针对冷启动的。

从点击程序的图标,到首页渲染完成显示到用户眼前,主要有三个阶段。

1.1、阶段一:main 函数之前

该阶段主要进行动态链接库 (dylib) 和自身 App 可执行文件的加载。

其中动态链接库包括:iOS 中用到的所有系统 framework,加载 OC runtime 方法的 libobjc,系统级别的 libSystem,例如 libdispatch(GCD) 和 libsystem_blocks (Block)。

1.2、阶段二:main 函数到首页加载之前

该阶段主要执行 main 函数到 applicationWillFinishLaunching 方法结束。

1.3、阶段三:首页开始加载到渲染完成

该阶段主要执行首页界面 viewDidLoad 方法和 UITabBarController 第一个子控制器 viewWillAppear 里的代码。

2、耗时产生原因

2.1、阶段一里可能产生耗时的有:

2.2、阶段二里可能产生耗时的有:

2.3、阶段三里可能产生耗时的有:

3、启动时间优化

3.1、针对阶段一的优化:

3.2、针对阶段二的优化:

3.3、针对阶段三的优化:

4、耗时检测工具

三、耗电优化

要研究耗电优化,就要先明白耗电产生的原因,然后针对性的做出一些优化。根据耗电的原因和可优化类型,可以分为 CPU 和 GPU 操作优化、网络优化、定位优化、动作传感器优化和蓝牙优化五大类。

1、CPU 和 GPU 操作优化

CPU 和 GPU 消耗是所有开发者绕不开的难关,良好的开发习惯,能让我们减少很多能耗,这里可以将前面介绍的界面优化结合起来,除此之外,有几个地方可以进行优化:

2、网络优化

3、定位优化

3、动作传感器优化

4、蓝牙优化

5、耗电检测

四、安装包瘦身

安装包的大小受资源文件和可执行文件影响,所以针对性的优化也是这两方面。

1、资源文件优化

2、可执行文件优化

最后郑重声明,本篇里只是记录一下我的个人总结,资料大量参考了以下文章:
iOS 保持界面流畅的技巧
今日头条iOS客户端启动速度优化;
iOS App 启动性能优化;
iOS App冷启动治理:来自美团外卖的实践;
iOS app启动速度研究实践;
iOS进阶--App功耗优化看这篇就够了
iOS的性能优化
iOS安装包瘦身小记
iOS App 安装包瘦身指南

欢迎大家来我的小窝做客啊,里面记录下了我进步的点点滴滴,一切逆境只是前进的理由,与君共勉。

上一篇 下一篇

猜你喜欢

热点阅读