...

Facebook 的 Superpack 数据压缩技术可将 Android App 大小减少 20%

2021-09-22

Facebook 软件工程师 Sapan Bhatia 在一篇博客中指出,该团队开发了一种名为 Superpack 的技术;可以将编译器分析与数据压缩相结合,以发现超出传统压缩工具能力的大小优化。“Superpack 突破了压缩的极限,实现了比现有压缩工具更好的压缩率。”

Bhatia 称,在 Facebook 管理应用程序大小是一项独特的挑战:每天,开发人员都会检查大量代码,每一行代码都会转化为应用程序中的额外位,最终下载到用户的手机上。如果不加检查,这个添加的代码会使应用程序变得越来越大,直到最终其下载所耗的时间将变得不可接受。

所以 Facebook 团队一直在研究 Superpack 技术。Bhatia 表示,在过去的两年里,Facebook 采用了 Superpack 来控制开发者引起的应用程序的增长,成功地减少了其 Android 应用程序的大小。与常规的 Android APK 压缩相比,这些应用程序的规模已经大幅缩小。与 Android 的默认 Zip 压缩相比,平均节省了 20% 以上。

例如,在 Android 系统上的主要 Facebook 应用程序,使用 Superpack 实际上已经减少了 40% 以上,而 Messenger 已经实现了 30% 以上的减少。具体如下图:

根据介绍,Superpack 的优势在于它能够压缩特定类型的代码(例如机器码和字节码),以及某些类型的结构化数据。Superpack 的底层方法基于对 Kolmogorov 算法复杂性度量的洞察,它将一条数据的信息内容定义为可以生成该数据的最短程序的长度。这意味着可以通过将数据表示为生成该数据的程序来压缩数据,而不是压缩信息本身。当该数据是开始时的代码时,则可以将其转换为具有较小压缩表示的数据。生成斐波那契数字及其索引列表的程序是包含此类数字的文件的高度压缩表示。

Bhatia 称,降低 Kolmogorov 复杂度本身的想法在压缩领域并不新鲜。Superpack 的新颖之处在于,结合了编译器方法与现代压缩技术来实现这一目标。

Superpack 最初的目标是作为一种缩减移动应用程序大小的工具,但 Facebook 认为它在许多其他需要数据压缩的领域也具有潜力。该公司正在开发一种新的按需可执行文件格式,通过在加载时保持共享库压缩和解压缩来节省磁盘空间;并正在考虑使用 Superpack 进行代码增量压缩以减少软件更新的大小。

此外,他们还在研究使用 Superpack 作为冷存储压缩器,以压缩很少使用的日志数据和文件。“目前,Superpack 仅供我们的工程师使用,但我们渴望将 Superpack 的好处带给每个人。为此,我们正在探索提高压缩工作与 Android 生态系统兼容性的方法......我们可能有一天会考虑开源 Superpack。”


来源:oschina