1. 程式人生 > >通過安裝包重排布優化 Android 端啟動效能

通過安裝包重排布優化 Android 端啟動效能

1. 前言

本章節我們將圍繞《支付寶 App 構建優化解析》另啟新系列,細分拆解客戶端在“程式碼管理”、“證書管理”、“版本管理”、“構建打包”等維度的具體實現方案展開討論,帶領大家進一步瞭解支付寶在 App 構建模組下的持續優化。

本節將主要記錄通過對支付寶 Android Apk 檔案的重新佈局,來改善 IO 效能的過程。

2. 背景

支付寶 App 在 Android 平臺上,由於大量業務快速上線,Android 長尾機型等原因,造成啟動階段及部分核心鏈路上,效能體驗不理想,進而影響使用者的使用的感受。
從純業務角度,可以通過優化 UI 佈局,優化程式碼結構,優化 bundle 載入等方式,對效能體驗有所改善。作為工程技術團隊,按照傳統思維來看,似乎無法對效能優化做多少貢獻。經過一些方案調研後,我們嘗試通過對編譯產物的優化,干預構建流程,以提升 App 效能。

3. 原理

佈局前後,Apk 中實際的檔案並沒有本質改變,只有位置發生了變化。那麼為什麼這樣的調整會有效能造成影響?這個原理要追溯到 Linux 的檔案系統機制。

如下圖所示,Linux 底層檔案系統中 VFS 上次 App 程序之間,存在一層 pagecache,pagecache 由記憶體中的物理 page 組成,其內容對應磁碟上的 block。Pagecache 的大小是動態變化的,可以擴大,也可以在記憶體不足時縮小。Cache 快取的儲存裝置被稱為後備儲存(backing store),一個 page 通常包含多個 block,這些 block 不一定是連續的。

011c084a6b328a32fbb2ce5135b811e7a2826acc