首先引用一下 High performance iOS Apps 这本书中的一段统计数据:缓存
Consider the following statistics:安全
- 79% of users retry an app only once or twice if it failed to work the first time.
- 25% of users abandon an app if it does not load in 3 seconds.
- 31% of users will tell others about their bad experience
翻译过来的意思就是:性能优化
从上面的数据统计能够看出,App性能对于应用的重要性,App可否被用户所承认不只仅取决于其功能,还取决于当与用户交互时,应用可否提供流畅的体验。网络
从某一个角度来看,是由于你的APP是可替代的,咱们能够从App Store找到大量的功能类似的替代品,为何用户在功能相同的状况下会坚持使用你开发的这一款,两个缘由:你的APP在功能上无可替代,或者是极少故障且性能格外出众并发
App性能会受不少因素影响,这些因素包括内存消耗,网络请求效率,用户界面的流畅性,用户操做的响应速度。因此咱们对性能的描述有一个量化的过程,咱们须要先概述不一样类型的性能特征,而后再对它们进行测量。app
一个好的移动应用应该要具有如下三个特色ide
可用性衡量用户如何与你的移动应用程序交互。若是他们没法操做你的应用程序,如不少功能没法使用,点击界面无响应,滑动页面时卡顿乃至奔溃,这些状况,用户很大可能会将你的APP从移动设别上删除。工具
高性能,这个实际上是用户感知最深的一块,这里包括几个小的方面,如用户界面响应效率,网络请求效率,用户交互体验。性能
Low performance
的标签,从而寻找同类型同功能体验更佳的APP,这个实际上是性能优化的核心。稳定性意味着它具备流畅,不间断的体验,不会出现错误消息或用户崩溃。若是应用程序一直收到错误消息的弹窗提示或者永无止境的加载屏幕,若是用户打开应用程序以前一直奔溃,若是用户使用应用程序几个小时以后发现电池是红色的,绝大部分用户会中止使用该应用程序。测试
咱们能够把性能量化成一个个可测量的性能指标,下面我将描述我对于性能量化的一些评判标准:
应用程序内存峰值取决与系统的硬件配置,占用太高的内存会致使后台应用被强制关闭,同时还要确保没有内存泄漏,随时间流逝持续增加的内存消耗意味着,应用程序可能会由于内存不足的异常而奔溃
电量消耗过大通常状况下会伴随着设备发烫,电量消耗是一个涉及面很广的场景,它不只仅与计算CPU周期有关,还包括高效地使用硬件。除了要实现电量消耗最小化,还要确保不会影响用户体验。
应用在启动时应执行恰好够用的任务以完成初始化,从而知足用户的使用需求。执行这些任务消耗的时间就是应用的初始化时间。启动时间会直接影响用户对应用程序的感官,秒开的APP通常意义上来讲都是用户喜欢的。
当触发了某个操做,用户老是但愿它能够尽快地工做。一切必要的处理都应该在尽量短的时间内完成。咱们经常使用的方式是使用空间换时间,尽量的快速响应用户的操做。
每一个应用都应该快速地响应用户交互。在应用中所作的一切优化和权衡最终都应该体如今响应速度上。
用户都但愿可以在无网络或者设备离线的状况下还能够浏览上次的内容,开发人员应该对本地存储的使用有所规划,以便应用具有离线浏览的能力。同时也须要提供一个清除物理存储空间与内存缓存空间的选项,物理存储空间占用过多,会使用户频繁的卸载这些应用来回收本地存储。内存消耗过多,也会致使应用被系统杀死,因此提供一个清理缓存的选项是颇有必要的。
移动设备会在不一样的网络环境下使用,为了确保可以提供最好的用户体验,你的应用应该适用于各类网络条件。而网络请求的响应速度会直接影响用户体验,如何作DNS优化,链接优化,弱网优化,是咱们在优化过程当中须要时刻关注的点。
这个主要是咱们的列表视图,FPS太低会给用户一种卡顿感,这是一种很糟糕的体验,优化咱们的TableView,提升渲染性能,给用户丝滑的体验感,是咱们在接下来的优化中要作的。
高性能的应用不只应尽量地避免奔溃,还应该在奔溃发生时优雅地恢复,尤为是在进行某个操做的过程当中发生奔溃时。奔溃后的自我修复方案与热更新方案能够帮到你。
安全对移动应用来讲是最重要的,由于敏感信息会在应用程序间共享,所以对通讯数据与本地共享数据进行加密就很是重要了。可是加密过程须要更多的计算会存储空间,可是这与最大化运行速度,最小化内存使用的目标相冲突。所以,咱们须要在安全和其它因素之间进行权衡。
优化不要作的太早,性能是后来才会考虑的事情,从某种程度上来看,我认同这种观点,毕竟最重要的是先完成功能需求。可是若是你在开发初期就已经有一套本身的优化方案与思想,你在开发过程当中就可使用最优化的代码与策略进行开发,优化与开发同时进行,开发即优化,我以为这是一种很不错的方式,同时也会大大减轻后期优化的工做量。
写优化系列的文章是想让本身走的更深一点,将本身理解的优化方案抛出来供你们参考,这个过程当中会出现各类不一样优化思想之间的碰撞,这才是最有趣的,既提高了本身,又方便了你们,何乐而不为~
性能优化系列文章,会从咱们日常开发的各个点出发给出优化方案与建议,每一个点都会最终落地成代码,或者第三方工具,不作标题党,每一个优化方案都是本人通过测试,对比,量化以后的成果,在这个过程当中也但愿能够收获你们的一些优化方案与思想,共同进步。
关于更博的规划,我目前的性能优化篇博文目录以下:
大概 12到 15篇文章,预计在7月中旬完成全部性能优化更博计划,中间会穿插一些其它非性能优化篇的博文,但愿各位看官能喜欢~