Android性能調(diào)優(yōu) - 網(wǎng)絡(luò)優(yōu)化

1.前言

  • 在移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展環(huán)境下,手機(jī)用戶日益對(duì)網(wǎng)絡(luò)的使用或體驗(yàn)有著更深度的訴求旺订,因此應(yīng)用中的網(wǎng)絡(luò)體驗(yàn)已經(jīng)顯得由此重要惹苗,而背后對(duì)開發(fā)者在網(wǎng)絡(luò)性能有更高的要求。
  • 網(wǎng)絡(luò)影響:
    1.最直觀的就是用戶交互體驗(yàn)耸峭;
    2.流量的流失桩蓉;
    3.電量的消耗;
  • 本文從連接劳闹、傳輸院究、監(jiān)控 三個(gè)維度提出相關(guān)的優(yōu)化。
  • 文章中實(shí)例 linhaojian的Github

2.HTTP請(qǐng)求過程

http請(qǐng)求流程.png
  • 通過上圖可以很清楚的理解HTTP協(xié)議的請(qǐng)求過程:
    1.客戶端輸入域名本涕,通過瀏覽器請(qǐng)求發(fā)送业汰;
    2.通過DNS解析域名,得到真正需要請(qǐng)求的服務(wù)器IP地址菩颖;
    3.服務(wù)端接收到請(qǐng)求內(nèi)容之后样漆,做出響應(yīng)
    (HTTP使用Socket構(gòu)建基于TCP/IP協(xié)議的通訊)
  • 因此我們就可以針對(duì)上述流程總結(jié)可優(yōu)化2個(gè)方向:連接晦闰、傳輸放祟。

3.連接

3.1 網(wǎng)絡(luò)狀態(tài)

  • 可以根據(jù)不同的網(wǎng)絡(luò)狀態(tài)(2G、3G呻右、4G跪妥、Wifi)針對(duì)性的提供處理策略。

3.2 弱網(wǎng)處理

  • 弱網(wǎng)的影響:存在較多的丟包声滥、誤碼眉撵、超時(shí)、連接中斷以及難以接入網(wǎng)絡(luò)等情況;
  • 針對(duì)弱網(wǎng)情況纽疟,可做一下優(yōu)化:
    1.失敗重試: 可在Retrofit等網(wǎng)絡(luò)框架添加攔截器罐韩,實(shí)現(xiàn)失敗重試;

3.3 IP直連

  • 優(yōu)點(diǎn):能減少DNS的域名解析過程污朽,從而提升連接或請(qǐng)求的速度伴逸。
  • 缺點(diǎn):IP暴露,不安全膘壶。

3.4 HttpDns

  • 出自:是阿里研發(fā)的產(chǎn)品HttpDns错蝴。
  • 作用:使用HTTP協(xié)議進(jìn)行域名解析,代替現(xiàn)有基于UDP的DNS協(xié)議颓芭,域名解析請(qǐng)求直接發(fā)送到阿里云的HTTPDNS服務(wù)器顷锰,從而繞過運(yùn)營(yíng)商的Local DNS,能夠避免Local DNS造成的域名劫持問題和調(diào)度不精準(zhǔn)問題亡问;

3.5 Http1.0官紫、Http1.1、Http2.0

  • 影響HTTP網(wǎng)絡(luò)請(qǐng)求主要是 帶寬延遲 州藕;
  • Http1.0每個(gè)TCP連接只能發(fā)送一個(gè)請(qǐng)求束世。發(fā)送數(shù)據(jù)完畢,連接就關(guān)閉床玻,如果還要請(qǐng)求其他資源毁涉,就必須再新建一個(gè)連接,每次請(qǐng)求連接都需要3次握手锈死,連接成本較高贫堰,性能較差。
  • Http1.1
    * 持久連接: 即TCP連接默認(rèn)不關(guān)閉待牵,可以被多個(gè)請(qǐng)求復(fù)用(對(duì)于同一個(gè)域名其屏,大多數(shù)瀏覽器允許同時(shí)建立6個(gè)持久連接);
    * 管道機(jī)制: 即在同一個(gè)TCP連接里面缨该,客戶端可以同時(shí)發(fā)送多個(gè)請(qǐng)求偎行,舉例:需要發(fā)送2個(gè)請(qǐng)求,以前HTTP1.0的做法是請(qǐng)求一次需要等等響應(yīng)贰拿,再請(qǐng)求第二次類似于一問一答蛤袒,而HTTP1.1就支持同時(shí)請(qǐng)求,之后按序響應(yīng)壮不;
    * 缺點(diǎn):隊(duì)頭阻塞汗盘,上述已說明HTTP1.1的TCP連接復(fù)用響應(yīng)按序的皱碘,那么在多個(gè)請(qǐng)求使用同一個(gè)TCP連接的時(shí)候询一,一個(gè)響應(yīng)的特別慢的時(shí)候,會(huì)影響后續(xù)的響應(yīng)速度。
  • Http2.0
    * 降低延遲: 路復(fù)用通過多個(gè)請(qǐng)求stream共享一個(gè)tcp連接的方式健蕊,解決了HOL blocking的問題菱阵,降低了延遲同時(shí)提高了帶寬的利用率。
    * 請(qǐng)求優(yōu)先級(jí): 多路復(fù)用帶來一個(gè)新的問題是缩功,在連接共享的基礎(chǔ)之上有可能會(huì)導(dǎo)致關(guān)鍵請(qǐng)求被阻塞晴及。SPDY允許給每個(gè)request設(shè)置優(yōu)先級(jí),這樣重要的請(qǐng)求就會(huì)優(yōu)先得到響應(yīng)嫡锌。
    * header壓縮: 前面提到HTTP1.x的header很多時(shí)候都是重復(fù)多余的虑稼。選擇合適的壓縮算法可以減小包的大小和數(shù)量。
    * 數(shù)據(jù)傳輸: HTTP/2采用二進(jìn)制格式而非文本格式势木。

3.6 連接復(fù)用

  • 根據(jù)相同的HOST請(qǐng)求蛛倦,可以設(shè)計(jì)連接的緩存,實(shí)現(xiàn)連接池進(jìn)行復(fù)用啦桌。例如:OkHttp中的Dispatcher溯壶;

4.傳輸

4.1 Protocol Buffers

  • 定義:Protocol Buffers 和 XML、JSON一樣都是結(jié)構(gòu)數(shù)據(jù)序列化的工具甫男。
  • 作用:通過將結(jié)構(gòu)化的數(shù)據(jù)(擁有多種屬性)進(jìn)行序列化且改,從而實(shí)現(xiàn)**數(shù)據(jù)存儲(chǔ)和交換的功能 **。
  • 優(yōu)點(diǎn):在傳輸數(shù)據(jù)量較大的需求場(chǎng)景下板驳,Protocol Buffer 比 XML又跛、JSON 更小(3到10倍)若治、更快(20到100倍)效扫、使用 & 維護(hù)更簡(jiǎn)單;而且 Protocol Buffer 可以跨平臺(tái)直砂、跨語音使用菌仁。

4.2 Gzip

  • 定義:在 http/1.0 協(xié)議中關(guān)于服務(wù)端發(fā)送的數(shù)據(jù)可以配置一個(gè) Content-Encoding 字段,這個(gè)字段用于說明數(shù)據(jù)的壓縮方法静暂。(Content-Encoding:gizp济丘、Accept-Encoding: gzip)

4.3 網(wǎng)絡(luò)緩存

  • 網(wǎng)絡(luò)緩存:提供一種將數(shù)據(jù)存儲(chǔ)到本地的思想,實(shí)現(xiàn)減少服務(wù)器的請(qǐng)求負(fù)荷洽蛀、加快請(qǐng)求速度摹迷、無網(wǎng)也能顯示內(nèi)容。例如:OkHttp的緩存機(jī)制(強(qiáng)制緩存對(duì)比緩存)郊供。

強(qiáng)制緩存:在緩存數(shù)據(jù)未失效的情況下峡碉,可以直接使用緩存數(shù)據(jù),由兩個(gè)字段Expires和Cache-Control用于標(biāo)明失效規(guī)則驮审。
對(duì)比緩存:表示需要和服務(wù)端進(jìn)行相關(guān)信息的對(duì)比鲫寄,由服務(wù)器決定是使用緩存還是最新內(nèi)容吉执,如果服務(wù)器判定使用緩存,返回響應(yīng)嗎304地来,判定使用最新內(nèi)容戳玫,則返回響應(yīng)碼200和最新數(shù)據(jù)(ETag和If-None-Match)。

4.4 圖片傳輸

1.可通過Webp的圖片格式傳輸未斑。
2.可實(shí)現(xiàn)圖片緩存機(jī)制(`二級(jí)緩存:Lrucache;DisLrucache等`)咕宿。

4.5 預(yù)加載

  • 在設(shè)計(jì)業(yè)務(wù)請(qǐng)求時(shí),可合理的設(shè)計(jì) 數(shù)據(jù)提前加載 的方式蜡秽,提升用戶的體驗(yàn)府阀。

5.監(jiān)控

5.1 Android Profiler

Android Profile.png
  • Receiving:表示下行流量, 即下載接收;
  • Sending:表示上行流量, 即上傳發(fā)送芽突;

5.2 Stetho

  • Stetho 是Facebook開源的Andorid調(diào)試工具肌似。當(dāng)你的應(yīng)用集成Stetho時(shí),開發(fā)者可以訪問Chrome诉瓦,在Chrome Developer Tools中查看應(yīng)用布局川队,網(wǎng)絡(luò)請(qǐng)求,sqlite睬澡,preference等等固额,可視化一切應(yīng)用操作(更重要的是不用root)。
    stetho.png

    stetho1.png

5.總結(jié)

  • 到此煞聪,網(wǎng)絡(luò)優(yōu)化 介紹完畢斗躏。
  • 如果喜歡我的分享,可以點(diǎn)擊 關(guān)注 或者 昔脯,你們支持是我分享的最大動(dòng)力 啄糙。
  • linhaojian的Github

歡迎關(guān)注linhaojian_CSDN博客或者linhaojian_簡(jiǎn)書

不定期分享關(guān)于安卓開發(fā)的干貨云稚。


寫技術(shù)文章初心

  • 技術(shù)知識(shí)積累
  • 技術(shù)知識(shí)鞏固
  • 技術(shù)知識(shí)分享
  • 技術(shù)知識(shí)交流
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隧饼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子静陈,更是在濱河造成了極大的恐慌燕雁,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲸拥,死亡現(xiàn)場(chǎng)離奇詭異拐格,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)刑赶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門捏浊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撞叨,你說我怎么就攤上這事金踪∽嵌矗” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵热康,是天一觀的道長(zhǎng)沛申。 經(jīng)常有香客問我劣领,道長(zhǎng)姐军,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上闯割,老公的妹妹穿的比我還像新娘蹈矮。我一直安慰自己,他們只是感情好颂砸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般辽话。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卫病,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天油啤,我揣著相機(jī)與錄音,去河邊找鬼蟀苛。 笑死益咬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的帜平。 我是一名探鬼主播幽告,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼裆甩!你這毒婦竟也來了冗锁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤嗤栓,失蹤者是張志新(化名)和其女友劉穎蒿讥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抛腕,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芋绸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了担敌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摔敛。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖全封,靈堂內(nèi)的尸體忽然破棺而出马昙,到底是詐尸還是另有隱情桃犬,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布行楞,位于F島的核電站攒暇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏子房。R本人自食惡果不足惜形用,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望证杭。 院中可真熱鬧田度,春花似錦、人聲如沸解愤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽送讲。三九已至奸笤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哼鬓,已是汗流浹背监右。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留魄宏,地道東北人秸侣。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宠互,于是被迫代替她去往敵國(guó)和親味榛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容