網絡優(yōu)化,首先要考慮網絡請求有哪些過程,
組拼數(shù)據(jù)------> 封裝請求發(fā)起請求--->DNS獲取ip-->通過htt發(fā)送出去--->網絡包在網絡中傳輸 --> 服務端收到請求返回端上。
組拼數(shù)據(jù)
較少數(shù)據(jù)量:Protobuf,gzip
網絡緩存:提供一種將數(shù)據(jù)存儲到本地的思想,實現(xiàn)減少服務器的請求負荷、加快請求速度、無網也能顯示內容。例如:OkHttp的緩存機制(強制緩存 與 對比緩存)。
強制緩存:在緩存數(shù)據(jù)未失效的情況下,可以直接使用緩存數(shù)據(jù),由兩個字段Expires和Cache-Control用于標明失效規(guī)則。
對比緩存:表示需要和服務端進行相關信息的對比,由服務器決定是使用緩存還是最新內容,如果服務器判定使用緩存,返回響應嗎304,判定使用最新內容,則返回響應碼200和最新數(shù)據(jù)(ETag和If-None-Match)。
圖片傳輸:用webp格式等,本地緩存。
封裝和發(fā)起請求
根據(jù)相同的HOST請求,可以設計連接的緩存,實現(xiàn)連接池進行復用。例如:OkHttp中的Dispatcher;
dns階段
IP直連, 多個ip直連。
DNS可能存在被劫持等問題,在之前的文章中也分析了DNS解析的過程,解決方案主要有httpDns等。
網絡包在網絡中傳輸
弱網環(huán)境引發(fā)的丟包問題,設置timeout時間,縮短發(fā)送的數(shù)據(jù)量,嘗試一次quick協(xié)議。
服務端收到請求返回端上。
預加載的方式,提前返回一些信息。
看到一篇博客提到網絡請求 Android部分手機4G網第一次請求很慢(wifi正常)
他在測試過程中發(fā)現(xiàn)InetAddress.getAllByName("xxxx.cn");
1、連接到公司wifi,只解析到 ipv4 地址
2、連接到4G網,解析到了ipv4、ipv6倆個地址
但是ipv6默認為集合中的第一個,是否我們可以嘗試修改集合第一個為ipv4呢?
到這里有個問題,getAllByName函數(shù)耗時嗎?如果不耗時,就是網絡請求訪問ipv6網址耗時,需要求證。
問題一: getAllByName是否耗時