iOS性能优化

9,055 阅读2分钟

包大小

Apple 下载大小限制

有时候下载 App 的时候,会提示:“此项目大于~~150MB ~~200MB(2019/05/31,这个大小被提高到200M ),除非此项目支持增量下载,否则您必须连接至WiFi才能下载。”。 这里的 ~~150M ~~,200M限制,是针对下载大小

低于iOS13 的设备下载大小超过 200MB 限制的时候完全无法通过流量下载, iOS13 及以上设备需要通过弹窗确认后,可以下载超过200MB 大小的App。

而这个限制会对拉新起到负向的影响。(据统计是影响新增约10%) image.png

Apple __TEXT 段大小限制

除了上边的限制之外Apple对可执行文件的__TEXT段有如下限制,如果说Apple对ITC上下载的大小的限制只是影响转化,而__TEXT段的限制则更为严苛,如果超出这个限制你的APP将无法通过 AppStore审核:

image.png

背景知识

包大小包含什么? image.png

image.png

image.png

image.png

image.png

单纯的去掉某个架构是没有效果的,因为App Store已经做了这部分的优化。

image.png

如何模拟?可以通过导出支持的设备模拟。 image.png

通过linkmap分析包大小 image.png

image.png

准入控制

mr分析:linkmap分析二进制大小变化、以及每个文件的大小变化

image.png

技术优化

image.png

资源优化

  1. 压缩字符串,例如html、css去空格等;
  2. 大图webp
  3. 少使用宏定义,减少重复代码

使用合适的资源压缩配置,只会影响Assets.car image.png

image.png

image.png

image.png

image.png

image.png

image.png

图片放入Assets前进行无损压缩,没有效果,为什么?

因为png无损压缩不会影响bitmap的大小,所以不会影响最终生成的.car文件的大小

image.png

image.png

image.png

如何实现无感知的有损压缩? 利用肉眼无法感知所有颜色,比如一张图片有500种颜色,但是只有30种是肉眼可见的,所以将颜色数量控制在30种,进而减少颜色数量。 image.png

image.png

二进制优化

计算代码的大小 image.png

image.png

image.png 查找无用类的原理 image.png

ICF

image.png

image.png

-Oz优化

image.png

通过外链函数减少代码,但是外链会对CPU造成影响,对性能影响应该不是很大。 image.png

image.png

属性动态化

image.png

image.png

image.png

image.png

业务优化

删除无用的vc和代码:

image.png image.png

image.png

启动优化

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

main函数之前: image.png

image.png

image.png

image.png

main函数之后:

image.png

image.png

image.png

image.png

image.png

image.png

PageIn:

image.png

image.png

非常规优化: image.png

能耗

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

能耗优化:

image.png

image.png

image.png

image.png

Crash

image.png

image.png

image.png

汇编指令: image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

安全气垫

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

卡死

image.png

image.png

image.png

image.png

image.png

image.png

image.png

OOM

什么是OOM?

由于APP占用内存过高,导致被系统杀掉的一种现象,用户感知就是崩溃,但是找不到崩溃日志。

image.png

什么是jetsam?

image.png

为什么要监控OOM?

image.png

监控原理

image.png

facebook排除法:

image.png

facebook排除法遗漏场景: image.png

遇到问题

image.png

image.png

image.png

问题发现

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

问题产生:

image.png

image.png

image.png