应用性能指标
- 内存
内存指运行应用所需的 RAM 最小值,以及应用消耗的内存平均值和峰值,最小值会严重限制硬件,而更高的内存平均值和峰值的后台应用会被强制关闭。
- 电量消耗
电量消耗不仅仅是计算CPU周期有关,还包括高效的使用硬件,除了要实现电量消耗最小化,还要确保不会影响用户的体验
- 初始化时间
应用在启动时应执行刚好够用的任务以完成初始化,从而满足用户的需求,执行这些任务消耗的时间就是应用的初始化时间。将一定的任务延后执行而不影响初始化时间
- 执行速度
一旦应用启动,用户总是希望它尽可能快的工作,一切必要的处理都应该在尽可能短的时间完成。
- 响应速度
应用快速的响应用户的交互,在应用中所做的一切优化和权衡最终都应该体现在响应速度上
- 本地存储
应用能够在无网络或者离线的情况下显示已载入的数据或者文件
- 互操作性
多个应用来完成某个任务,这就需要这些应用直接提供互操作的能力。iOS为实现应用间的互操作性和数据共享提供了多种机制,UIACtivityViewController、深层链接、MutipeerConnectivity框架等等
- 网络环境
为用户提供进度指使或错误提示信息,防止无尽的等待或者崩溃
高带宽稳定环境
低带宽稳定环境
高带宽不稳定环境
低带宽不稳定环境
无网络环境
- 数据刷新
刷新的频率和每次传输的数据量将决定数据传输的总量,如果传输的字节数过大,那用户将会快速消耗自己的流量,当流量消耗大到一定程度,用户必然会删除应用
-
多用户支持
家庭成员之间可能会共享设备,或者一个用户可能会有同个应用的多个账号
添加新用户尽可能高效
在不同用户之间更新尽可能高效
在不同用户之间切换尽可能高效
用户数据的界限应该简介且没有bug
-
单点登录
用户登录了一个应用,只需要点击一次,就可以登录到其他的应用中,这个过程不仅需要支持跨应用的数据共享,还需要分享状态,跨应用同步等
-
安全
对所有通信以及本地数据和共享数据进行加密。实现安全需要更多的计算、内存和存储,但这与最大化运行速度、最小化内存和存储使用的目标相冲突,因此需要衡量安全和其他因素之间的权衡
-
崩溃
应用可能会而且确实会崩溃。过度优化会导致崩溃,使用原始c代码也可能会导致崩溃。高性能的应用不仅要尽可能避免崩溃,还应该在崩溃发生时优雅的恢复
应用性能分析
- 采样
采样可以作为初始化的性能调优手段,并可用于跟踪CPU和内存的使用情况
优点:一定的周期间隔采集状态
缺点:如果采样的频率是10毫秒,那你就无法得知9.99999毫秒发生了什么
- 埋点
可以在关键部分主动埋点,也可以在性能分析或者处理用户反馈时针对性的埋点。
优点:通过修改代码,记录细节信息
缺点:需要注入额外的代码,一定程度上影响应用的性能,对内存和速度造成伤害
测量
通过测量性能找出真正存在问题的地方,可以避免掉入多早优化的陷阱
- 设置工程与代码
构建和发布:确保能够轻松的构建和发布应用
可测试性:确保你的代码代码能够同时在模拟数据和真实数据上工作
可跟踪性:确保你能通过明确问题发生的位置和代码行为来处理错误
- 设置崩溃报告
崩溃报告系统用于收集分析应用的调试日志。Flurry、Buggly、友盟等
- 对应用埋点
对应用进行埋点是了解用户行为的一个重要步骤。埋点之发生在特定的时期。记录特定的代码以记录关键指标时提升应用性能的重要步骤。Flurry 、Buggly、友盟等
- 日志
日志提供了用于在不同级别跟踪应用的细节信息,比如debug、Verbose、info、warning和Error。日志会贯穿应用的整个生命周期。
总结:了解影响性能的因素,性能不仅涉及用户体验,更关系到应用是否能高效的运行。