今日头条安装包优化策略与操作
前言
自2016年起,今日头条开始关注其iOS端应用的安装包大致难题,启动了包大致优化规划。在经过多年的探索与操作后,今日头条不仅提高了包大致的优化效率,还取得了显著的成果。这篇文章小编将围绕“今日头条安装”这个主题,详细介绍在安装包优化经过中所采取的具体策略与取得的成果,旨在为同行业者提供借鉴与思索。
一、安装包的构成
对于每一个iOS应用来说,安装包的组成主要包含资源文件与可执行文件。通过构建后,我们获得的ipa文件经过解压后,会在.app文件中找到下面内容内容:
1. 资源文件:主要是图像、音频等。以Assets.car文件为代表,它是iOS Asset Catalog的构建产物。
2. Mach-O文件:Mach-O文件是iOS上的可执行文件,经过编译与链接后生成,通常占据安装包的绝大部分空间。
1.1 Assets.car 文件
Assets.car文件是由Xcode构建的,包含了应用中的所有资源。在优化经过中,我们使用了actool(Asset Catalog Tool)对其中的png图片进行重新编码,从而大幅压缩文件大致。
1.2 Mach-O文件
Mach-O文件是包含应用代码的二进制文件。使用工具分析Mach-O文件能帮助我们了解其构成,进而对其进行更有效的优化。
二、资源文件优化
在包大致优化方面,资源文件的压缩无疑是一种有效的手段。今日头条在此方面进行了多种尝试。
2.1 调整资源压缩配置
在过去,大多数Pod库的最低支持版本仍停留在iOS 8.0,这对Assets.car的构建造成了影响。通过将Pod库和主工程的最低支持版本提升至iOS 9,并开启相应的优化选项,我们成功实现了包大致的显著减少,取得了2.31MB的优化效果。
2.2 RGB with Palette压缩
在对Asset Catalog中PNG图片进行压缩时,我们尝试采用了新的RGB with palette编码方式。这种技巧通过维护一个颜色数组来降低图片的尺寸,特别适合那些颜色接近的扁平风格图标。经过实验证明,这一技巧带来了3.15MB的优化效果。
2.3 合并Assets.car文件
由于使用CocoaPods集成组件,今日头条应用内携带了多个Assets.car文件。通过在构建经过中合并多个Assets.car文件,优化了图片的加载效率,并减少了包的整体大致,最终实现了2.1MB的优化效果。
2.4 文这篇文章小编将件压缩
除了图片,应用中还存在众多文这篇文章小编将件(如JSON、HTML等)。通过在构建阶段对这些文件进行压缩,并在App启动时解压,我们在Lottie动画的JSON文件中成功实现了400KB的优化效果。
三、Mach-O文件优化
Mach-O文件是今日头条安装包中最重要的组成部分,占据了安装包85%左右的体积,优化其大致是必要的措施。
3.1 使用-Oz编译参数
Xcode 11新增的-Oz编译参数能够对重复的机器指令进行优化,从而减少文件大致。经过评估后,我们对大部分源代码应用这一参数,取得了4MB以上的文件大致降低。
3.2 链接时优化(LTO)
链接时优化可以在编译与链接阶段的经过中进行,能够有效缩小文件体积。今日头条同时开启了增量LTO,最终实现了6.5MB的大致减免。
3.3 精简导出符号配置
对Mach-O中不必要的符号进行过滤,设置EXPORTED_SYMBOLS_FILE以精简导出符号,缩减包大致的同时能有效提高逆向难度。经过该优化,包的大致减少了2.1MB。
3.4 属性动态化
OC中的属性会占用一定的大致,通过使用@dynamic修饰符,不生成成员变量及其set/get技巧,我们在大量JSONModel子类中节省了800KB的包大致。
3.5 __TEXT段迁移技术
通过将__TEXT段迁移到__BD_TEXT段,可以减少可执行文件的加密范围,从而提升文件的压缩效率,最终成功减少了60MB的Download Size。
3.6 二进制段压缩
通过对Mach-O文件中不立即需要的段进行压缩,并在需要时才解压,这一技巧的实施为我们带来了3.5MB的优化效果。
四、拓展资料
怎样样?经过上面的分析的技巧与操作,今日头条在不断迭代的经过中成功优化了安装包的大致。面对日益复杂的技术要求,我们不仅要有精深的技术能力,还需要各方的通力合作。在此,我们呼吁对技术充满热诚的朋友加入我们的团队,共同探索和创造,为数亿用户带来更好的使用体验。
五、加入我们
如果你对技术充满渴望,愿意在优化与技术攻坚中追求极点,欢迎加入今日头条的iOS团队,与我们一起开创更杰出的未来。我们在北京、深圳均有招聘需求,简历投递邮箱:tech@bytedance.com,深入了解格式为“姓名 &8211; 职业年限 &8211; 今日头条 &8211; 平台架构 &8211; iOS/Android”。期待你的加入与共同成长!