過去兩年多時間里,F(xiàn)acebook 公司的軟件團(tuán)隊(duì)一直在研究壓縮應(yīng)用程序代碼的方法,以期使應(yīng)用程序的大小更易于管理。經(jīng)過不懈努力,團(tuán)隊(duì)今天終于介紹了名為 Superpack 的新技術(shù)成果。
Facebook Engineering 今天更新的長博文中,F(xiàn)acebook 軟件工程師 Sapan Bhatia 談到了管理應(yīng)用程序大小的獨(dú)特挑戰(zhàn)。他解釋說,F(xiàn)acebook 的開發(fā)人員不斷向該公司的移動應(yīng)用添加新的代碼,包括 Facebook 應(yīng)用、Messenger、WhatsApp 和 Instagram。
他說:“每天,開發(fā)人員都會簽入大量的代碼,每一行代碼都會轉(zhuǎn)化為人們最終下載到手機(jī)上的應(yīng)用程序中的額外容量。如果不加以檢查,這些增加的代碼將使應(yīng)用程序越來越大,直到最后它的下載時間變得不可接受”。
Facebook的應(yīng)用程序開發(fā)人員已經(jīng)采用了一堆數(shù)據(jù)壓縮技術(shù),但該公司表示,這些方法無法跟上它增加新功能和更新的速度。因此,在過去的兩年里,F(xiàn)acebook 的團(tuán)隊(duì)一直在研究 Superpack 技術(shù),它聲稱該技術(shù)已經(jīng)能夠?qū)崿F(xiàn)比現(xiàn)有工具“明顯更好”的壓縮率。
Bhatia 表示,Superpack 的優(yōu)勢在于它能夠壓縮特定類型的代碼,如機(jī)器碼和字節(jié)碼,以及某些種類的結(jié)構(gòu)化數(shù)據(jù)。他解釋說,Superpack 的基本底層方法是基于對 Kolmogorov 的復(fù)雜性算法衡量的見解,它將一塊數(shù)據(jù)的信息含量定義為能夠生成該數(shù)據(jù)的最短程序的長度。這意味著有可能通過將其表示為生成該數(shù)據(jù)的程序來壓縮數(shù)據(jù),而不是壓縮信息本身。
他寫道:“當(dāng)該數(shù)據(jù)是代碼開始時,那么它可以被轉(zhuǎn)化為具有更小的壓縮表示的數(shù)據(jù)。一個生成斐波那契數(shù)的程序加上一個索引列表,就是一個包含這種數(shù)字的文件的高度壓縮表示”。他補(bǔ)充說,減少 Kolmogorov 復(fù)雜性的想法在數(shù)據(jù)壓縮領(lǐng)域并不是一個新的想法。新的是,Superpack 采用了編譯器方法與現(xiàn)代壓縮技術(shù)的結(jié)合來實(shí)現(xiàn)這一目標(biāo)。
Bhatia 說,在過去的幾年里,F(xiàn)acebook 已經(jīng)采用了 Superpack 來控制開發(fā)者引起的應(yīng)用程序的容量增長,實(shí)際上已經(jīng)設(shè)法減少了其 Android 應(yīng)用程序的大小。Bhatia寫道,“與普通的 Android APK 壓縮相比,應(yīng)用程序的平均大小減少了約20%”。
例如,在 Android 系統(tǒng)上的主要 Facebook 應(yīng)用程序,使用 Superpack 實(shí)際上已經(jīng)減少了 40% 以上,而 Messenger 已經(jīng)實(shí)現(xiàn)了 30% 以上的減少。由于沒有討論的原因,該技術(shù)在 WhatsApp 上似乎不太成功。
盡管Superpack被認(rèn)為是減少移動應(yīng)用程序大小的一種方式,但Facebook相信它在許多其他需要數(shù)據(jù)壓縮的領(lǐng)域具有潛力。該公司目前正在努力將該技術(shù)應(yīng)用于一種新的按需可執(zhí)行文件格式,該格式可以通過保持共享庫的壓縮并在加載時才解碼來節(jié)省磁盤空間。
它還在考慮使用超級包來實(shí)現(xiàn)代碼的壓縮,以減少軟件更新的大小。最后,F(xiàn)acebook認(rèn)為有可能使用Superpack作為很少使用的冷存儲文件的壓縮器。Bhatia 說:“目前,Superpack 只對我們的工程師開放,但我們希望把 Superpack 的好處帶給所有人,為此,我們正在探索如何提高我們的壓縮工作與Android生態(tài)系統(tǒng)的兼容性。我們可能有一天會考慮開放 Superpack 的源代碼”。