Facebook Engineering 今天更新的长博文中,Facebook 软件工程师 Sapan Bhatia 谈到了管理应用程序大小的独特挑战。他解释说,Facebook 的开发人员不断向该公司的移动应用添加新的代码,包括 Facebook 应用、Messenger、WhatsApp 和 Instagram。
他说:“每天,开发人员都会签入大量的代码,每一行代码都会转化为人们最终下载到手机上的应用程序中的额外容量。如果不加以检查,这些增加的代码将使应用程序越来越大,直到最后它的下载时间变得不可接受”。
Facebook的应用程序开发人员已经采用了一堆数据压缩技术,但该公司表示,这些方法无法跟上它增加新功能和更新的速度。因此,在过去的两年里,Facebook 的团队一直在研究 Superpack 技术,它声称该技术已经能够实现比现有工具“明显更好”的压缩率。
Bhatia 表示,Superpack 的优势在于它能够压缩特定类型的代码,如机器码和字节码,以及某些种类的结构化数据。他解释说,Superpack 的基本底层方法是基于对 Kolmogorov 的复杂性算法衡量的见解,它将一块数据的信息含量定义为能够生成该数据的最短程序的长度。这意味着有可能通过将其表示为生成该数据的程序来压缩数据,而不是压缩信息本身。
他写道:“当该数据是代码开始时,那么它可以被转化为具有更小的压缩表示的数据。一个生成斐波那契数的程序加上一个索引列表,就是一个包含这种数字的文件的高度压缩表示”。他补充说,减少 Kolmogorov 复杂性的想法在数据压缩领域并不是一个新的想法。新的是,Superpack 采用了编译器方法与现代压缩技术的结合来实现这一目标。
Bhatia 说,在过去的几年里,Facebook 已经采用了 Superpack 来控制开发者引起的应用程序的容量增长,实际上已经设法减少了其 Android 应用程序的大小。Bhatia写道,“与普通的 Android APK 压缩相比,应用程序的平均大小减少了约20%”。
例如,在 Android 系统上的主要 Facebook 应用程序,使用 Superpack 实际上已经减少了 40% 以上,而 Messenger 已经实现了 30% 以上的减少。由于没有讨论的原因,该技术在 WhatsApp 上似乎不太成功。
尽管Superpack被认为是减少移动应用程序大小的一种方式,但Facebook相信它在许多其他需要数据压缩的领域具有潜力。该公司目前正在努力将该技术应用于一种新的按需可执行文件格式,该格式可以通过保持共享库的压缩并在加载时才解码来节省磁盘空间。
它还在考虑使用超级包来实现代码的压缩,以减少软件更新的大小。最后,Facebook认为有可能使用Superpack作为很少使用的冷存储文件的压缩器。Bhatia 说:“目前,Superpack 只对我们的工程师开放,但我们希望把 Superpack 的好处带给所有人,为此,我们正在探索如何提高我们的压缩工作与Android生态系统的兼容性。我们可能有一天会考虑开放 Superpack 的源代码”。