Android網路請求優化

2021-10-09 16:09:09 字數 2542 閱讀 2018

安全方面

首先是防劫持,我們可以考慮使用 httpdns。這裡需要注意 httpdns 只是乙個概念,並不是乙個現有的開源庫。它與傳統的 dns 解析的區別在於 httpdns 會繞過運營商的 dns 伺服器,直接與 dns 伺服器的 80 埠進行互動,有效地防止了網域名稱劫持。

關於 dns 解析的速度優化方面,我們可以從以下幾個方面進行突破:

ip 直連方式經常會針對不同的開發環境使用,比如針對在 qa、staging 測試環境下,可以直接配置 ip 白名單,跳過 dns 解析流程,但這樣同樣需要實現 okhttp 的 dns 介面

當我們在做網路請求時,如果網路裝置切換路由,訪問網路出現長時間無響應,很久之後會丟擲 unknownhostexception,並且我們在 okhttp 中設定的 connecttimeout 屬性對 dns 的解析不起作用。這種情況我們可以在自定義的 dns 類中做超時判斷,如下所示:

實際上有時在做網路請求資料可達優化的時候,經常會不可避免地與本地持久化繫結在一起。比如當一次網路請求失敗時,我們需要將這次請求儲存在本地,並嘗試重新傳送;或者請求資料成功,我們需要將資料快取在本地,當下一次請求資料展示 ui 之前,先將快取中的資料展示到頁面,只有當新的請求返回資料之後,再次重新整理頁面。

一般的做法是建立乙個資料庫 entity 類,並根據自家公司的業務邏輯設定公共引數,通常都會有 user_id、更新時間 update_time 等,如下所示:

後續當我們再次執行相同 key 的網路請求時,就可以先將本地資料庫中的資料展示到頁面,並進行非同步請求操作重新整理頁面。

http 方法的冪等性是指一次和多次請求某乙個資源應該具有同樣的***。舉乙個例子:當我們點外賣付款時,服務端扣款成功後傳送給客戶端一條扣款成功的訊息,但是如果此時由於網路問題,客戶端並沒有成功接收到此訊息,使用者就有可能認為沒有付款成功,甚至是嘗試再次付款。

冪等性就是為了解決這種問題,但是它屬於**設計層面的技巧,並不是乙個實體方法或者開源庫。實現冪等性需要客戶端和服務端協同合作實現。比如原始的付款方法如下:

複製

boolean

pay(user_id, amount)

;

上述方法代表從賬戶 user_id 中扣除 amount 數量的金額,多次操作就會造成同乙個 user_id 賬戶被扣款多次。可以通過以下方式將付款方式實現冪等:

複製

int

create_pay_ticker()

boolean

idempotent_pay

(ticket_id, account_id, amount)

create_pay_ticket 的語義是獲取乙個伺服器端生成的唯一的處理號 ticket_id,它將用於標識後續的操作。idempotent_pay 和 pay 的區別在於關聯了乙個 ticket_id,乙個 ticket_id 表示的操作至多只會被處理一次,這樣庫款的操作就符合冪等性了,客戶端就可以放心地多次呼叫。

實際上很多 http 請求方法自身就符合冪等性,具體可以參考:理解http冪等性。

max:最多100次請求,強制斷掉連線。就是在timeout時間內又有新的連線過來,同時max會自動減1,直到為0,強制斷掉。

* 管道機制: 即在同乙個tcp連線裡面,客戶端可以同時傳送多個請求,舉例:需要傳送2個請求,以前http1.0的做法是請求一次需要等等響應,再請求第二次類似於一問一答,而http1.1就支援同時請求,之後按序響應;

* 缺點:隊頭阻塞,上述已說明http1.1的tcp連線復用與響應按序的,那麼在多個請求使用同乙個tcp連線的時候,乙個響應的特別慢的時候,會影響後續的響應速度。

* 降低延遲: 路復用通過多個請求stream共享乙個tcp連線的方式,解決了hol blocking的問題,降低了延遲同時提高了頻寬的利用率。

* 請求優先順序: 多路復用帶來乙個新的問題是,在連線共享的基礎之上有可能會導致關鍵請求被阻塞。spdy允許給每個request設定優先順序,這樣重要的請求就會優先得到響應。

* header壓縮: 前面提到http1.x的header很多時候都是重複多餘的。選擇合適的壓縮演算法可以減小包的大小和數量。

* 資料傳輸: http/2採用二進位制格式而非文字格式。

附錄:httpdns

okhttp接入httpdns,最佳實踐

okhttp 接入httpdns(支援http/https,)達到ip直連

Android網路請求優化

學習自trinea大神還有一些另外的文章 分析工具 1.android內建的profile monitor 不僅可以看網路,還可以看記憶體,cpu 2.提供弱網的工具,測試弱網 還有wifi情況 3.截獲網路包,進行分析 url一般是用網域名稱直接請求的,雖然local dns會快取,但是最好還是能...

Android 網路優化

最近一直在看okgohttp 開源 並嘗試著去修改它,總結一下 網路優化 1.減少網路請求的數量,盡量合併的網路請求,一次查詢中完成多個零散資料的查詢 2.做好網路快取 3.多執行緒處理,耗時工作及計算放在子執行緒中 4.設定超時時間,資料壓縮傳送,比如從伺服器端獲取列表資料,如果可以最好是能將伺服...

Android 網路優化

非常值得學習的文章,別的不說,網路請求成功率從95到 99.5這個資料 代表一切了。工具profile檢視網路請求 debug log看報文 charles看報文 mock 直接使用url 網路協議 可以考慮摒棄http,僅使用tcp,原因有3點 1.http無法優化弱網 2.http需要dns解析...