標籤:
from://http://greenrobot.me/devnews/facebook-engineer-improve-android-app/
Facebook工程師是如何改進他們Android用戶端的
本文來源於 Facebook工程師部落格。
作為世界上最大的社交網路,Facebook的Android用戶端面臨著各種各樣的使用環境(地理環境、Android裝置以及移動網路等環境的差異)。也正是這個原因,為了檢測自家Android用戶端在發展中國家的效能表現,Android的產品經理、工程師在2013年的時候去了一趟非洲。當時我看到這個新聞的時候覺得有點怪異,後來看到他們這篇部落格才有點理解他們這樣做的原因了。
這群Facebook的工程師來到非洲之後,並在當地使用Facebook的最新版本的Android用戶端。測試的結果的確讓他們印象深刻:
- 當地的網路環境十分糟糕,App經常中斷網路連接。
- 當地人民使用的Android裝置記憶體小,導致App載入緩慢,而且經常崩潰。
- 他們的月流量在40分鐘之內就用完了。
經過這個讓人印象深刻的測試的之後,Facebook的工程師們開始對他們的Android用戶端進行了一系列的最佳化。
效能最佳化
這裡主要是改進了App在低端機上的效能問題。
- 問題:單核的Android手機在啟動Facebook的時候更慢,這是因為app在啟動的時候並行初始化了多個模組。
解決方案:在單核手機上延緩這些初始化過程到啟動之後,甚至只有在某個模組要被使用的時候才開始初始化這個模組。
- 問題:資訊流在網路環境差時載入速度慢。
解決方案:儘早地從伺服器抓取資訊流資料,用更多的時間來建立串連,並下載資訊流的內容。
最終的效果是App的啟動時間減少了50%。
資料處理效率的最佳化
非洲的旅程讓工程師們發現流量在發展中國家非常昂貴,而且作為Facebook重要體驗一環的照片則是流量花費的大頭,於是為了讓人民在不擔心流量的前提下安心享用Facebook,工程師們決定對App裡面的照片動刀:
- 尋找現有圖片格式的替換者。經過工程師們的調研,在眾多的圖片格式中,最後工程師選擇了Google的WebP。原因很簡單:壓縮效率高,而且對Android的支援好(畢竟就是Google提出來的)。使用 WebP 之後,相對於JPG格式的圖片,流量省了將近 25% 到 35 %;相對於 PNG 格式的圖片,流量省了將近80%。最重要的是使用WebP之後圖片品質還沒改變。
- 按照裝置處理圖片的能力來載入圖片。在之前,Facebook的App都是統一載入最大解析度的圖片,這樣做是為了讓使用者可以自由的縮放圖片。後來改進之後,app最先載入的圖片大小適合顯示這個圖片視窗大小一樣。如果需要縮圖,app就只載入縮圖大小的圖片,使用者需要更高解析度的圖片,app也能載入,而且之前的統一載入最大解析度的圖片了。
- 調整緩衝和重用圖片的策略。工程師測試了不同的緩衝策略,不同的緩衝大小,最後綜合出最優方案。
最後的效果也是講流量花費減少了50%。
網路最佳化
由於許多地區的網路環境比較差,這讓Facebook的App的體驗也變得十分糟糕,於是工程師也對app的網路效率和可靠性進行了一番改進。
- 使用OkHttp。Facebook 很早就開始使用Square公司開發的OkHttp(一個開源的網路通訊協定棧)了,現在Google 官方也從Android 4.4開始使用 OkHttp作為HttpURLConnection的預設實現了。 OkHttp 支援在糟糕的網路環境下面更快的重試,並且還能利用 SPDY 協議進行快速的並髮網絡請求。
- 利用Okhttp調整圖片的預先抓取演算法,確保app中下載隊列前面的圖片被優先處理,防止隊列阻塞時間過長。
經過最佳化後,圖片載入慢或者載入 失敗的反饋少了將近90%。
App檔案大小最佳化
工程師在非洲的時候發現人們使用數量最多的手機磁碟空間很小,也就是說這給使用者升級帶來的障礙,進而可以推斷這些人們因為手機的空間問題而一直使用舊版本的app,那麼他們也就無法升級享受前面提到過的最佳化後的app體驗。於是工程師開始致力於如何對app檔案大小進行最佳化:
- 利用Google Play提供的功能為不同的Android版本、不同的Android螢幕解析度的手機提供不同的安裝檔案。這樣就可以在不同的裝置上面進行功能的取捨了。
- 當然在這個過程中需要監測工具和測試載入器來保證最佳化app檔案大小之後app功能的正常性。現在Facebook的工程師已經開發出一套可以計算每個特性對Facebook Android App貢獻了多大的空間。
經過最佳化之後的檔案大小減少了將近65%。
反思
Facebook 工程師們的非洲之旅讓他們更加理解了移動app效能、資料處理的有效性、網路的可靠性以及app的檔案大小對發展中國家移動市場意味著什麼。
工程師在這之後開始對每次app新添加的特性都會進行各方面的測實驗證,而且Facebook還有一套工具可以直接獲得使用者對這些特性的反饋,而且工程師開始將這些實踐延伸到 Messenger 和 Instagram 的Android App。
Facebook工程師是如何改進他們Android用戶端的