iOS包大小优化-二进制检测和优化
今年开始做和性能优化有关的工作,有些我个人认为有用的有价值的经验总结,分享给需要的同学。会包含一个系列,以我个人做的时间顺序形成对应的章节,内容包含:包大小、CPU、内存这些老生常谈的性能优化话题。内容上的初衷是尽量避免和已有的同质化,提供一些不同的观点。
结果
仓库链接:BBLinkMapParser
工具检测结果如下
该工具存在限制如下:
- Linkmap是从文件的角度分析(一个文件可能包含多个类、文件名称和类名称可能不一致)、无用类是用类的角度分析,只能筛选出文件包含单个类并且文件名和类型相同的结果
- 无用类分析目前只支持一级无引用的分析,多级无引用的分析暂不支持(比如 A∉主工程 && A->B,可以分析出无用类为A,但是B会被忽略)
为什么做
谈到包大小优化,大体上是考虑以下的优化点
- 资源优化
- 无用资源查找和去除
- 图片压缩(有损压缩)
- Asset.car 编译优化(Asset Catalog Optimization)
- 音频文件优化
- 文件压缩(减少安装大小)
- 二进制优化
- 编译选项优化
- Link-Time Optimization
- Apple Clang Optimization Level
- Swift Compiler Optimization
- Link Map 分析处理
- 编译选项优化
这些点在网上都可以找到所需的资料,但是并没有一个工具可以做到: 分析无用代码是分布在代码的哪些模块,哪些类中,方便定位并和做针对性的优化。所以考虑使用 Link Map 作为切入点,结合无用代码检测工具,二次开发一个检测工具,
调研实施
网上可以找到比较好的无用代码分析工具是 WBBlades 以及基于Linkmap的代码大小分析工具 LinkMap ,所以大体有个想法基于这两个工具开发一个无用代码分布检测工具,所以就有了 BBLinkMapParser 。
主要的步骤如下:
- 解析 LinkMap 获取所有目标文件的大小占用
- 通过 WBBlades 获取无用的类文件(命令行的方式调用)
- 第1步和结果和第2步的结构取交集生成一个结果
- 第3步的结果根据用户输入条件筛选,打印出最终的结果
这里就不贴代码了,有需要直接查看代码即可。