Android網絡優化方案

一、對於網絡的優化,我們可以從以下五個維度來進行。
1.流量優化

精確獲取網絡流量的消耗量,解決整體均值掩蓋單點異常流量的問題。

2.網絡監控

建設全面的網絡監控,因爲粗粒度的監控不能夠幫助我們發現和解決問題。

3.流量消耗

1、精準獲取一段時間的流量消耗、網絡類型、前後臺。

2、用戶流量消耗均值、異常率(消耗多、次數多)。

3、完整鏈路全監控(Request、Response)、主動上報。

4.網絡請求質量

1、請求時長、業務成功率、失敗率、TOP 失敗接口,導致請求失敗的原因通常有兩種情況:
1)、弱信號:可以簡單看成手機信號只有一兩格的時候,這是不僅僅是信令(無線網絡通信的都是一個個的信令)發出去困難,還可能導致不斷切換網絡、基站。App 只能在應用層做重試,因爲弱信號一般都是一時的。
2)、擁塞網絡:可以類比爲堵車、排隊的場景,數據包排隊,信令也在排隊。這時 App 不斷重試,只會使得擁塞網絡更爲嚴重。我們只能讓自己的非核心業務不要去排隊,並讓核心業務的數據量更少,協議來回更少。

2、用戶體驗

3、請求速度、成功率:網絡正常時如何更好地利用帶寬提升網絡請求速度?

4、弱網:網絡不穩定是如何最大程度上保證網絡的連通性?

5、安全:如何防止被第三方劫持、竊聽甚至篡改?

二、網絡優化工具
1、Network Profiler

特點
1)、顯示實時網絡活動:發送、接收數據及連接數。
2)、需啓動高級分析。
3)、僅支持 HttpURLConnection 與 OkHttp

選中 Connection View 特定的一條數據即可在右邊看到該請求對應的網絡數據。

三、精準獲取流量消耗
1、如何判斷 App 流量消耗偏高?

1)、絕對值看不出高低。
2)、對比競品,相同 Case 對比流浪消耗。
3)、異常監控超過正常指標。

2、線上流量獲取方案
  • NetworkStatsManager
    API 23 之後。
    特點
    1)、獲取指定時間間隔內的流量信息。
    2)、獲取不同網絡類型下的消耗。
    NetUtils.getStats
    獲取指定時間間隔的 蜂窩 + WIFI 流量總信息
四、常見使用網絡的場景
  • 1、數據壓縮
    POST 請求 Body 使用 GZip 壓縮,同時服務端返回 Body 也使用 GZip 壓縮。

  • 2、圖片
    圖片使用策略細化:讓 服務端/CDN 雲服務器 優先使用縮略圖/WebP格式圖片。
    根據用戶的當前的網絡質量來判斷下載什麼質量的圖片(電商用的比
    較多)。

  • 3、性能日誌上報:批量 + 特定場景上報
    APM 相關、單點問題相關。例如埋點數據可以等到某一時機點(例如 開啓了 WIFI、數據量過大必須上傳一部分時)再上傳。

  • 4、數據緩存
    服務端返回加上過期時間,避免每次重新獲取。 節約流量且大幅提高數據訪問速度,更好的用戶體驗。

  • 5、使用Retrofit和Okhttp實現網絡緩存
    5.1.配置okhttp中的Cache

OkHttpClient okHttpClient = new OkHttpClient();
File cacheFile = new File(context.getCacheDir(), "[緩存目錄]");
Cache cache = new Cache(cacheFile, 1024 * 1024 * 100); //100Mb
okHttpClient.setCache(cache);

5.2.配置請求頭中的cache-control

@Headers("Cache-Control: public, max-age=3600)
@GET("merchants/{shopId}/icon")
Observable<ShopIconEntity> getShopIcon(@Path("shopId") long shopId);

6、合併網絡請求、減少請求次數。

7、流量兜底能力
如果發現流量異常,我們可以通過後臺服務器終止協議交互,以避免問題惡化。

參考:
https://www.jianshu.com/p/23a7d13bbe7f

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章