通過ART 提高Android App 性能 [復制鏈接]

2019-11-4 10:33
Growup 閱讀:163 評論:0 贊:0
Tag:  ART

在Android Pie中,我們在Play Cloud中推出了ART優化配置文件,這是一項新的優化功能,可在新安裝或更新后大大縮短應用程序啟動時間。平均而言,我們觀察到應用程序在各種設備上的啟動速度提高了15%(冷啟動)。一些英雄案例甚至顯示30%+更快的啟動時間。其中一個最重要的方面是用戶可以免費獲得此功能,無需他們的支持或開發人員的努力!



ART優化Play Cloud中的配置文件

該功能建立在先前的Profile Guided Optimization(PGO)工作的基礎上,該工作是在Android 7.0 Nougat中引入的。PGO允許Android Runtime通過構建應用程序最重要的熱門代碼的配置文件并將其優化工作集中在其上來幫助提高應用程序的性能。這可以帶來巨大的改進,同時減少完全編譯的應用程序的傳統內存和存儲影響。但是,它依賴于設備在空閑維護模式下根據這些代碼配置文件優化應用程序,這意味著它可能在用戶看到好處之前幾天 - 我們的目標是改進。



Play Cloud中的ART優化配置文件利用Android Play的強大功能,在安裝/更新時帶來所有PGO優勢:大多數用戶無需等待即可獲得出色的性能!這個想法依賴于兩個關鍵的觀察:

  1. 應用程序通常在眾多用戶和設備之間具有許多常用的代碼路徑(熱代碼),例如在啟動或關鍵用戶路徑期間使用的類。這通常可以通過聚合幾百個數據點來發現。
  2. 應用程序開發人員通常會逐步推出他們的應用程序,從alpha / beta渠道開始,然后擴展到更廣泛的受眾。即使沒有alpha / beta設置,用戶也常常會增加到新版本的應用。

這意味著我們可以使用應用程序的初始部署來為其余用戶引導性能。ART分析應用程序代碼的哪些部分值得在初始設備上進行優化,然后將數據上傳到Play Cloud,后者將構建核心聚合代碼配置文件(包含與所有設備相關的信息)。一旦有足夠的信息,代碼配置文件就會發布并與應用程序的APK一起安裝。

在設備上,代碼配置文件充當種子,在安裝時實現有效的配置文件引導優化。這些優化有助于改善冷啟動時間和穩定狀態性能,所有這些都不需要app開發人員編寫單行代碼。


第1步:構建代碼配置文件

其中一個主要目標是盡可能快地從聚合和匿名數據中構建高質量,穩定的代碼配置文件(以最大限度地增加可以受益的用戶數量),同時確保我們有足夠的數據來準確優化應用程序的性能。采樣過多的數據會在安裝時占用更多帶寬和時間。此外,我們構建代碼配置文件的時間越長,獲得好處的用戶就越少。采樣過少的數據,代碼配置文件將沒有足夠的信息來確定適當優化的內容,以便產生影響。

聚合的結果就是我們所說的核心代碼配置文件,它只包含有關每個設備隨機會話樣本中經常出現的代碼的匿名數據。我們刪除異常值以確保我們專注于對大多數用戶而言重要的代碼。

實驗表明,可以在很短的時間內非常快速地計算出最常用的代碼路徑。這意味著我們能夠以足夠快的速度構建代碼配置文件,以便大多數用戶受益。



第2步:安裝代碼配置文件

在Android 9.0 Pie中,我們引入了一種新類型的安裝工件:dex元數據文件。與APK類似,dex元數據文件是常規存檔,其中包含有關如何優化APK的數據 - 例如已在云中構建的核心代碼配置文件。一個關鍵的區別是dex元數據僅由平臺和應用商店管理,并且不會被開發人員直接看到。

還有對App Bundles / Google Play動態交付的內置支持:無需任何開發人員干預,所有應用程序的功能拆分都經過優化。



第3步:使用代碼配置文件優化性能

要了解這些代碼配置文件如何實現更好的性能,我們需要查看它們的結構。代碼配置文件包含以下信息

  • 啟動期間加載的類
  • 運行時認為值得優化的熱方法
  • 代碼的布局(例如,在啟動或啟動后執行的代碼)

使用這些信息,我們使用了各種優化技術,其中以下三項提供了大部分優勢:

  • 應用程序映像:我們使用啟動類來構建預先填充的堆,其中類已預先初始化(稱為應用程序映像)。當應用程序啟動時,我們將圖像直接映射到內存中,以便所有啟動類都可用。
  • 這樣做的好處是應用程序的執行可以節省周期,因為它不需要再次執行工作,從而可以縮短啟動時間。
  • 代碼預編譯:我們預編譯所有熱代碼。當應用程序執行時,代碼中最重要的部分已經過優化,可以本地執行。該應用程序不再需要等待JIT編譯器啟動。
  • 好處是代碼被映射為干凈的內存(與JIT臟內存相比),這提高了整體內存效率。內存壓力下內核可以釋放干凈的內存,而臟內存則不能,減少內核殺死應用程序的可能性。
  • 更高效的dex布局:我們根據配置文件公開的方法信息重新組織dex字節碼。dex字節碼布局如下所示:[啟動代碼,發布啟動代碼,其余非配置代碼]。
  • 這樣做的好處是可以更高效地將dex字節代碼加載到內存中:內存頁面具有更好的占用率,并且由于所有內容都在一起,因此我們需要減少負載,并且我們可以減少I / O.

改進和觀察

我們在去年年底向Playstore上的所有應用程序推出了云中的配置文件。

  • 超過30,000個應用程序已經顯示出改進
  • 平均而言,冷啟動在各種設備上的速度提高了15%
  • 許多頂級應用在所選設備上獲得20%+(例如Youtube)甚至30%(例如Google搜索)。
  • 在Android Pie獲取配置文件的應用程序安裝量的90%以上
  • 額外優化的安裝時間幾乎沒有增加
  • 適用于所有Pie設備。

一個非常有趣的觀察是,平均而言,ART概述了大約20%的應用方法(如果我們計算代碼的實際大小,則更少)。對于某些應用程序,配置文件僅占代碼的2%,而對于某些應用程序,該數字則高達60%。



為什么這是一個重要的觀察?這意味著運行時沒有看到很多應用程序代碼,因此不會投入代碼的優化。雖然有許多有效的用例,其中代碼將不會被執行(例如錯誤處理或向后兼容性代碼),但這也可能是由于未使用的功能或不必要的代碼。偏斜分布是一個強烈的信號,后者可以在進一步優化中發揮重要作用(例如,通過刪除不需要的dex字節碼來降低APK大小)。

未來發展

我們對ART優化配置文件所展示的改進感到興奮,并且我們將來會更多地發展這一概念。構建每個應用程序的代碼配置文件為更多應用程序改進提供了機會。開發人員可以使用數據根據最終用戶的相關性和重要性來改進應用。使用“個人檔案”中收集的信息,可以重新組織或修剪代碼,以提高效率。開發人員可以使用App Bundle根據其使用情況拆分其功能,并避免向用戶發送不必要的代碼。我們已經看到應用啟動時間的巨大改進,并希望看到配置文件帶來的額外好處,使開發人員的生活更輕松,同時為我們的用戶提供更好的體驗


我來說兩句
您需要登錄后才可以評論 登錄 | 立即注冊
facelist
所有評論(0)
領先的中文移動開發者社區
18620764416
7*24全天服務
意見反饋:[email protected]

掃一掃關注我們

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粵ICP備15117877號 )

安卓版28杠游戏