优化 iOS 应用本地化字符串大小:Airbnb 的压缩与去重策略

Swiftable

总结:

Miguel Jimenez 分享了 Airbnb 优化 iOS 应用本地化字符串大小的策略。

  • 挑战: Airbnb 支持 61 种语言,未优化前本地化字符串文件占应用大小的 22%(约 54MB),导致用户安装率下降和卸载率上升。
  • 优化方法 1:字符串文件压缩。 在构建时使用 Apple 的 LZFSE 算法压缩所有语言文件,运行时只解压用户当前语言的文件,显著减少了下载和安装大小。
  • 优化方法 2:本地化键去重。 将键值对格式重构为单独的翻译数组和全局唯一键列表,避免了键在不同语言文件中的重复,进一步减少了文件大小。
  • 实现细节: 引入了一个自定义构建时流水线(使用 Swift CLI 工具进行压缩和去重)和一个运行时 StringManager 单例(处理解压、键值映射和缓存,以避免影响启动时间)。
  • 效果: 优化后,本地化资源从占应用总大小的 22% 减少到 4%,整体降低了 82%。
  • 权衡: 优点是显著减少了应用大小并提供了未来优化的灵活性;缺点是需要开发和维护一套不直接与 Apple API 兼容的自定义解决方案。

本地化资源大小优化前后对比
本地化资源大小优化前后对比 [ 00:19:23 ]

介绍 [00:00:10]

演讲者 Miguel Jimenez 介绍
演讲者 Miguel Jimenez 介绍 [ 00:01:21 ]

本地化 API 的挑战 [00:03:55]

iOS 本地化 API 的工作原理
iOS 本地化 API 的工作原理 [ 00:04:58 ]

本地化优化概念 [00:06:27]

本地化字符串压缩流程图
本地化字符串压缩流程图 [ 00:07:48 ]

本地化键去重思路:新格式,将键和值分离
本地化键去重思路:新格式,将键和值分离 [ 00:09:17 ]
* 关键点: 翻译数组和全局键列表的顺序必须严格对齐,以便通过索引查找对应关系。 * 运行时操作 [00:10:18] * 将特定语言的翻译数组与全局键列表进行“压缩”操作(即将它们重新组合),以在运行时重建原始的键值字典。
本地化键去重思路:运行时“压缩”键和翻译
本地化键去重思路:运行时“压缩”键和翻译 [ 00:10:17 ]

权衡与考量 [00:10:46]

Airbnb 的实现 [00:12:56]

String Manager 运行时设置流程图
String Manager 运行时设置流程图 [ 00:16:24 ]
String Manager 类及其 `translation` 方法代码示例
String Manager 类及其 `translation` 方法代码示例 [ 00:18:35 ]

优化效果 [00:19:09]

验证步骤 [00:19:58]

问答环节 [00:21:40]