Google采用檔對(duì)檔修補(bǔ)技術(shù),Android程序更新檔最多可減肥90%
檔對(duì)檔的修補(bǔ)即是奠基在偵測(cè)原始內(nèi)容的相異處,先將新、舊壓縮檔解壓縮,找出不同之處并進(jìn)行修補(bǔ)之后,再重新壓縮。平均可減少65%的更新檔案大小,有些時(shí)候甚至可減少90%以上。
你曾擔(dān)心Android程式更新讓傳輸流量破表嗎?Google在本月初發(fā)表了新型態(tài)的Android程式更新技術(shù),采用了檔對(duì)檔修補(bǔ)(File-by-File patching)平均可減少65%的更新檔案大小,有些時(shí)候甚至可減少90%以上。
File-by-File patching源自于Archive-patcher開放源碼專案,它能夠逐個(gè)檢查壓縮檔案中的個(gè)別檔案以進(jìn)行修補(bǔ),因此極為節(jié)省空間,也支援各種有效的壓縮檔。
Google Play軟體工程師Andrew Hayden舉例,假設(shè)某本書的作者想要變更書中的一段話,只告訴編輯需要修改的部份比重新寄出整本新書要容易得多,換言之,只進(jìn)行修補(bǔ)要比下載完整的APK更小也更快速。
Hayden說明,包括APK(Android程式副檔名)在內(nèi)的許多壓縮檔都是利用Deflate技術(shù)進(jìn)行壓縮,Deflate是個(gè)很好的資料壓縮技術(shù)但卻很難辨識(shí)原始內(nèi)容的改變,原始內(nèi)容的一丁點(diǎn)變更都會(huì)讓壓縮版本大為不同,要找出原始內(nèi)容的不同之處相對(duì)容易,但要找出壓縮版本的不同之處卻很難,讓修補(bǔ)沒效率。
檔對(duì)檔的修補(bǔ)即是奠基在偵測(cè)原始內(nèi)容的相異處,先將新、舊壓縮檔解壓縮,找出不同之處并進(jìn)行修補(bǔ)之后,再重新壓縮。
有鑒于此一程序?qū)?huì)耗費(fèi)裝置上更多的處理資源,因此需要較新的裝置,例如2015年以后出貨的行動(dòng)裝置,重新壓縮1MB可能需要1秒,若在低階或舊機(jī)種上則會(huì)更久一些。
Google實(shí)際列出了某些程式采用File-by-File patching之后的更新檔案大小差異,例如Google Maps原始檔案為32.7MB,但透過File-by-File patching的尺寸則會(huì)縮小至9.6MB,Kindle原始檔案為52.4MB,利用File-by-File patching即變成8.4MB,而原本16.2MB的Netflix以File-by-File patching方式修補(bǔ)則只需下載1.2MB。
現(xiàn)階段此一修補(bǔ)技術(shù)只適用于啟用程式自動(dòng)更新的Android裝置,通常會(huì)在手機(jī)插上電源且未使用時(shí)于背景進(jìn)行更新,以確保使用者不必等待更新。