【安卓開發】Facebook工程師是如何改進他們Android客戶端的

safe_image

做爲世界上最大的社交網絡,Facebook的Android客戶端面臨着各類各樣的使用環境(地理環境、Android設備以及移動網絡等環境的差別)。也正是這個緣由,爲了檢測自家Android客戶端在發展中國家的性能表現,Android的產品經理、工程師在2013年的時候去了一趟非洲。當時我看到這個新聞的時候以爲有點怪異,後來看到他們這篇博客纔有點理解他們這樣作的緣由了。android

這羣Facebook的工程師來到非洲以後,並在當地使用Facebook的最新版本的Android客戶端。測試的結果的確讓他們印象深入:git

  1. 當地的網絡環境十分糟糕,App常常中斷網絡鏈接。
  2. 當地人民使用的Android設備內存小,致使App加載緩慢,並且常常崩潰。
  3. 他們的月流量在40分鐘以內就用完了。

通過這個讓人印象深入的測試的以後,Facebook的工程師們開始對他們的Android客戶端進行了一系列的優化。github

性能優化

這裏主要是改進了App在低端機上的性能問題。web

  • 問題:單核的Android手機在啓動Facebook的時候更慢,這是由於app在啓動的時候並行初始化了多個模塊。
    解決方案:在單核手機上延緩這些初始化過程到啓動以後,甚至只有在某個模塊要被使用的時候纔開始初始化這個模塊。
  • 問題:信息流在網絡環境差時加載速度慢。
    解決方案:儘早地從服務器抓取信息流數據,用更多的時間來創建鏈接,並下載信息流的內容。

最終的效果是App的啓動時間減小了50%。算法

數據處理效率的優化

非洲的旅程讓工程師們發現流量在發展中國家很是昂貴,並且做爲Facebook重要體驗一環的照片則是流量花費的大頭,因而爲了讓人民在不擔憂流量的前提下安心享用Facebook,工程師們決定對App裏面的照片動刀:緩存

  1. 尋找現有圖片格式的替換者。通過工程師們的調研,在衆多的圖片格式中,最後工程師選擇了Google的WebP。緣由很簡單:壓縮效率高,並且對Android的支持好(畢竟就是Google提出來的)。使用 WebP 以後,相對於JPG格式的圖片,流量省了將近 25% 到 35 %;相對於 PNG 格式的圖片,流量省了將近80%。最重要的是使用WebP以後圖片質量還沒改變。
  2. 按照設備處理圖片的能力來加載圖片。在以前,Facebook的App都是統一加載最大分辨率的圖片,這樣作是爲了讓用戶能夠自由的縮放圖片。後來改進以後,app最早加載的圖片大小適合顯示這個圖片窗口大小同樣。若是須要縮略圖,app就只加載縮略圖大小的圖片,用戶須要更高分辨率的圖片,app也能加載,並且以前的統一加載最大分辨率的圖片了。
  3. 調整緩存和重用圖片的策略。工程師測試了不一樣的緩存策略,不一樣的緩存大小,最後綜合出最優方案。

最後的效果也是講流量花費減小了50%。性能優化

網絡優化

因爲許多地區的網絡環境比較差,這讓Facebook的App的體驗也變得十分糟糕,因而工程師也對app的網絡效率和可靠性進行了一番改進。服務器

  1. 使用OkHttp。Facebook 很早就開始使用Square公司開發的 OkHttp(一個開源的網絡協議棧)了,如今Google 官方也從Android 4.4開始使用 OkHttp做爲HttpURLConnection的默認實現了。  OkHttp 支持在糟糕的網絡環境下面更快的重試,而且還能利用 SPDY 協議進行快速的併發網絡請求。
  2. 利用Okhttp調整圖片的預先抓取算法,確保app中下載隊列前面的圖片被優先處理,防止隊列阻塞時間過長。

通過優化後,圖片加載慢或者加載 失敗的反饋少了將近90%。網絡

App文件大小優化

工程師在非洲的時候發現人們使用數量最多的手機磁盤空間很小,也就是說這給用戶升級帶來的障礙,進而能夠推斷這些人們由於手機的空間問題而一直使用舊版本的app,那麼他們也就沒法升級享受前面提到過的優化後的app體驗。因而工程師開始致力於如何對app文件大小進行優化:併發

  1. 利用Google Play提供的功能爲不一樣的Android版本、不一樣的Android屏幕分辨率的手機提供不一樣的安裝文件。這樣就能夠在不一樣的設備上面進行功能的取捨了。
  2. 固然在這個過程當中須要監測工具和測試工具來保證優化app文件大小以後app功能的正常性。如今Facebook的工程師已經開發出一套能夠計算每一個特性對Facebook Android App貢獻了多大的空間。

通過優化以後的文件大小減小了將近65%。

反思

Facebook 工程師們的非洲之旅讓他們更加理解了移動app性能、數據處理的有效性、網絡的可靠性以及app的文件大小對發展中國家移動市場意味着什麼。

工程師在這以後開始對每次app新添加的特性都會進行各方面的測試驗證,並且Facebook還有一套工具能夠直接得到用戶對這些特性的反饋,並且工程師開始將這些實踐延伸到 Messenger 和 Instagram 的Android App。

相關文章
相關標籤/搜索