Facebook 的 Superpack 數(shù)據(jù)壓縮技術(shù)可將 Android App 大小減少 20%
Facebook 軟件工程師 Sapan Bhatia 在一篇博客中指出,該團(tuán)隊開發(fā)了一種名為 Superpack 的技術(shù);可以將編譯器分析與數(shù)據(jù)壓縮相結(jié)合,以發(fā)現(xiàn)超出傳統(tǒng)壓縮工具能力的大小優(yōu)化?!癝uperpack 突破了壓縮的極限,實現(xiàn)了比現(xiàn)有壓縮工具更好的壓縮率。”
Bhatia 稱,在 Facebook 管理應(yīng)用程序大小是一項獨特的挑戰(zhàn):每天,開發(fā)人員都會檢查大量代碼,每一行代碼都會轉(zhuǎn)化為應(yīng)用程序中的額外位,最終下載到用戶的手機(jī)上。如果不加檢查,這個添加的代碼會使應(yīng)用程序變得越來越大,直到最終其下載所耗的時間將變得不可接受。
所以 Facebook 團(tuán)隊一直在研究 Superpack 技術(shù)。Bhatia 表示,在過去的兩年里,F(xiàn)acebook 采用了 Superpack 來控制開發(fā)者引起的應(yīng)用程序的增長,成功地減少了其 Android 應(yīng)用程序的大小。與常規(guī)的 Android APK 壓縮相比,這些應(yīng)用程序的規(guī)模已經(jīng)大幅縮小。與 Android 的默認(rèn) Zip 壓縮相比,平均節(jié)省了 20% 以上。
例如,在 Android 系統(tǒng)上的主要 Facebook 應(yīng)用程序,使用 Superpack 實際上已經(jīng)減少了 40% 以上,而 Messenger 已經(jīng)實現(xiàn)了 30% 以上的減少。具體如下圖:
根據(jù)介紹,Superpack 的優(yōu)勢在于它能夠壓縮特定類型的代碼(例如機(jī)器碼和字節(jié)碼),以及某些類型的結(jié)構(gòu)化數(shù)據(jù)。Superpack 的底層方法基于對 Kolmogorov 算法復(fù)雜性度量的洞察,它將一條數(shù)據(jù)的信息內(nèi)容定義為可以生成該數(shù)據(jù)的最短程序的長度。這意味著可以通過將數(shù)據(jù)表示為生成該數(shù)據(jù)的程序來壓縮數(shù)據(jù),而不是壓縮信息本身。當(dāng)該數(shù)據(jù)是開始時的代碼時,則可以將其轉(zhuǎn)換為具有較小壓縮表示的數(shù)據(jù)。生成斐波那契數(shù)字及其索引列表的程序是包含此類數(shù)字的文件的高度壓縮表示。
Bhatia 稱,降低 Kolmogorov 復(fù)雜度本身的想法在壓縮領(lǐng)域并不新鮮。Superpack 的新穎之處在于,結(jié)合了編譯器方法與現(xiàn)代壓縮技術(shù)來實現(xiàn)這一目標(biāo)。
Superpack 最初的目標(biāo)是作為一種縮減移動應(yīng)用程序大小的工具,但 Facebook 認(rèn)為它在許多其他需要數(shù)據(jù)壓縮的領(lǐng)域也具有潛力。該公司正在開發(fā)一種新的按需可執(zhí)行文件格式,通過在加載時保持共享庫壓縮和解壓縮來節(jié)省磁盤空間;并正在考慮使用 Superpack 進(jìn)行代碼增量壓縮以減少軟件更新的大小。
此外,他們還在研究使用 Superpack 作為冷存儲壓縮器,以壓縮很少使用的日志數(shù)據(jù)和文件?!澳壳?,Superpack 僅供我們的工程師使用,但我們渴望將 Superpack 的好處帶給每個人。為此,我們正在探索提高壓縮工作與 Android 生態(tài)系統(tǒng)兼容性的方法......我們可能有一天會考慮開源 Superpack?!?/p>