近日,Facebook团队宣布了一种名为 Superpack 压缩器,Superpack 是一种非对称压缩器,解压速度快,但压缩速度慢,可以将编译器分析与数据压缩相结合,优化传统压缩工具的部分功能。Superpack 突破了压缩技术的极限,实现了比现有压缩工具更好的压缩率。Superpack 现已应用于结构化数据、代码、整数和字符串数据,它目前不支持图像、视频或声音文件的压缩。

Facebook开发团队认为, Facebook 应用程序的体积变得越来越大,最终下载所需的时间也随之增加。由于压缩文件占用的空间更少,这意味着小体积应用程序可以被更快下载,尤其在移动带宽有限、下载大型应用程序成本高昂的地区,可以节省带宽资源。因此,他们开发了一种称为 Superpack 的压缩技术。

下面是使用 Superpack 压缩器的应用程序与其他压缩方式的对比图。Superpack 与常规的 Android APK 压缩相比,这些应用程序体积明显变小(如图一所示);与 Android 的默认 Zip 压缩相比,平均节省了 20% 以上(如图二所示)。

Facebook 头像 android facebook android app_深度学习


图一所示

Facebook 头像 android facebook android app_android_02


图二所示


Superpack 的优势

Superpack 的优势在于压缩代码,例如机器码和字节码,以及其他类型的结构化数据。Superpack 的底层方法基于对Kolmogorov 算法复杂性度量的洞察,它将一条数据的信息内容定义为可以生成该数据的最短程序的长度。虽然降低 Kolmogorov 复杂度本身的想法在压缩领域并不新鲜。Superpack 的新颖方法包括将编译器方法与现代压缩技术相结合来实现这一目标。Superpack也通过以下几点来提高压缩效率。

  • 改进了 LZ 解析——Superpack 能够发现更长的重复序列,同时减少表示指针的位数,从而改进了 LZ 解析过程。
  • 改进了熵编码——Superpack 具有内置的非对称数字系统( ANS)编码器,也支持多个编码后端的可插拔架构。Superpack 通过识别要表示的文字具有较低熵的上下文,来改进熵编码。
  • 解决数据包含非结构化值——Superpack 压缩时通过将非结构化值转换为程序来借用值结构。然后,在解压时,程序被解释以恢复原始数据。
  • Superpack 主要针对三种有效载荷——第一个是 Dex 字节码,Java 在 Android 应用程序中编译成的格式。第二个是ARM机器码,是为ARM处理器编译的代码。第三个是 Hermes 字节码,它是 Facebook 创建的一种专门的 Javascript 高性能字节码表示。Zip、Xz 和 Superpack 对这三种格式产生的压缩率如下表所示。

**Superpack 架构与未来发展

Facebook 为了扩展 Superpack 开发和使用,研究了一种具有抽象的模块化设计,可以在不同格式中重复使用。Superpack 的架构类似于操作系统,其内核实现分页内存分配、文件和存档抽象、转换和操作指令的抽象,以及可插拔模块的接口。

Facebook 头像 android facebook android app_应用程序_03

Superpack 最初的目标是作为一种缩减移动应用程序大小的工具,但 Facebook 认为它在许多其他需要数据压缩的领域也具有潜力。该公司正在开发一种新的按需可执行文件格式,通过在加载时保持共享库压缩和解压缩来节省磁盘空间,考虑使用 Superpack 进行代码增量压缩以减少软件更新的大小。此外,Facebook开发团队还在研究使用 Superpack 作为冷存储压缩器,以压缩很少使用的日志数据和文件;以及致力于完善 Android 生态系统兼容性。也许某一天Facebook会考虑开源 Superpack 项目 。