基本的優(yōu)化總結(jié)(八)

導(dǎo)言

這一節(jié)目標(biāo)著眼于常見的網(wǎng)絡(luò)請(qǐng)求方面的優(yōu)化

基礎(chǔ)

首先分析一個(gè)網(wǎng)絡(luò)請(qǐng)求的基本過程
1.創(chuàng)建一個(gè)請(qǐng)求坎藐,然后在工作線程中執(zhí)行
2.對(duì)域名進(jìn)行DNS解析,然后進(jìn)行連接能颁,其中TCP連接要完成三次握手杂瘸,如果是HTTPS的話也要完成TLS握手
3.連接完成后往輸入流中寫入數(shù)據(jù),然后等待服務(wù)端往輸出流中寫入數(shù)據(jù)
4.服務(wù)端處理完業(yè)務(wù)邏輯伙菊,將數(shù)據(jù)寫入輸出流中
5.客戶端接收到數(shù)據(jù)败玉,進(jìn)行后期處理,然后回到主線程中處理
基于以上的步驟镜硕,考慮一下優(yōu)化的方案

準(zhǔn)備

首先考慮第一步运翼,網(wǎng)絡(luò)請(qǐng)求要在工作線程中進(jìn)行,那么線程的執(zhí)行數(shù)量必然會(huì)收到限制兴枯,同樣的血淌,為了不限制性能,請(qǐng)不要使用AsyncTask和HandlerThread模型财剖,但是請(qǐng)求串行處理會(huì)降低效率悠夯,最明顯的就是當(dāng)執(zhí)行到一個(gè)速度較慢的接口會(huì)直接拖慢整體的運(yùn)行效率
1.線程數(shù)受限,要求并發(fā)請(qǐng)求接口不宜過多躺坟,同時(shí)因?yàn)橐恍┖笈_(tái)任務(wù)的執(zhí)行沦补,所以考慮CPU核心數(shù)-1會(huì)合適一點(diǎn)
2.非單核手機(jī)不應(yīng)該串行執(zhí)行網(wǎng)絡(luò)請(qǐng)求,否則很容易出現(xiàn)卡頓的情況
3.初始任務(wù)也應(yīng)該放入工作線程中執(zhí)行瞳氓,比方說參數(shù)的拼接獲取策彤、加解密操作等等,因?yàn)檫@些操作往往會(huì)大于16.67ms執(zhí)行時(shí)間
4.從性能上面來說匣摘,應(yīng)該要求接口盡可能的少店诗,也就是要合并接口,此外這也是一個(gè)耗電問題音榜,網(wǎng)絡(luò)請(qǐng)求本身是一個(gè)耗電操作

DNS解析

第二步中提到要對(duì)DNS進(jìn)行一個(gè)解析操作庞瘸,這是因?yàn)閟ocket連接維度是基于IP地址和端口,比方說HTTP默認(rèn)就是80端口赠叼,而HTTPS就是443端口
傳統(tǒng)的DNS解析模式為客戶端向運(yùn)營(yíng)商DNS發(fā)起域名解析請(qǐng)求擦囊,然后DNS返回IP地址违霞,之后客戶端再通過IP和端口發(fā)起連接
從這塊進(jìn)行優(yōu)化的技術(shù)為HTTPDNS,具體可以看下面的地址瞬场,講的非常詳細(xì)
https://github.com/CNSRE/HTTPDNSLib
大致總結(jié)一下:
1.要防止本地DNS劫持买鸽。本地在第一次訪問DNS服務(wù)器得到結(jié)果的時(shí)候,也是會(huì)在本地緩存一份IP映射表贯被,這樣做是為了在下一次獲取的時(shí)候提速眼五,所以說這里存在劫持或者緩存過期的問題(同樣,自己的HTTPDNS也會(huì)有這個(gè)問題彤灶,不過可以在劫持方面做一些努力看幼,會(huì)相對(duì)好一些)
2.降低延時(shí),提高用戶的體驗(yàn)幌陕。IP分配類似CDN的思想诵姜,比方說按照片區(qū)劃分,這樣深圳的用戶能夠就近訪問廣州機(jī)房的機(jī)器搏熄,而不是去訪問廈門的機(jī)器棚唆,這樣也會(huì)快不少
3.降低失敗率。簡(jiǎn)單說就是提供多一種手段來處理心例,比方說先用HTTPDNS瑟俭,失敗后再用本地DNS處理,都失敗那就沒辦法了

TCP和TLS握手及TCP慢啟動(dòng)問題

建立一次HTTPS的連接契邀,必須做這么幾件事情,首先是TCP的三次握手失暴,然后就是TLS的握手流程
現(xiàn)代IM基于長(zhǎng)連接坯门,很大的一個(gè)優(yōu)點(diǎn)就是去除了大量的握手操作,從而加快了數(shù)據(jù)傳輸
這一點(diǎn)在OkHttp中也有體現(xiàn)逗扒,OkHttp會(huì)嘗試重用連接古戴,從而減少重復(fù)的TCP握手
這可以看OkHttp閱讀筆記(四)
并且TCP具有慢啟動(dòng)的特點(diǎn),在之前已經(jīng)使用過的前提下矩肩,再次使用效率也會(huì)較之前的更好
所以說在一些頻繁使用的場(chǎng)景下现恼,比方說日志上報(bào)、IM這塊使用持續(xù)連接會(huì)更好

結(jié)果處理

等服務(wù)端成功返回?cái)?shù)據(jù)之后黍檩,客戶端需要對(duì)數(shù)據(jù)進(jìn)行解密等一系列的操作叉袍,這一塊考慮如下:
1.返回后的統(tǒng)一處理,比方說利用GSON序列化數(shù)據(jù)為對(duì)象刽酱,這類型的操作大約為500ms以上級(jí)別的操作喳逛,要考慮這個(gè)操作是在當(dāng)前網(wǎng)絡(luò)線程中執(zhí)行或者在額外的工作線程中再執(zhí)行,如果要求網(wǎng)絡(luò)執(zhí)行快的話棵里,那么建議利用其余線程處理润文,這樣可以使得當(dāng)前線程被快速重用到其余等待執(zhí)行的網(wǎng)絡(luò)請(qǐng)求
2.數(shù)據(jù)處理完畢之后姐呐,有的操作實(shí)際上是沒有必要回到主線程中的,或者說有的操作過于簡(jiǎn)單典蝌,都不需要調(diào)度線程曙砂,因?yàn)檎{(diào)度線程還是有一定的開銷的,所以說網(wǎng)絡(luò)庫(kù)要具備靈活處理回調(diào)后結(jié)果的能力

結(jié)語(yǔ)

這一節(jié)只是一些基礎(chǔ)的處理方式骏掀,也是一個(gè)基本的網(wǎng)路封裝的考量

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸠澈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子砖织,更是在濱河造成了極大的恐慌款侵,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侧纯,死亡現(xiàn)場(chǎng)離奇詭異新锈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)眶熬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門妹笆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人娜氏,你說我怎么就攤上這事拳缠。” “怎么了贸弥?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵窟坐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我绵疲,道長(zhǎng)哲鸳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任盔憨,我火速辦了婚禮徙菠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘郁岩。我一直安慰自己婿奔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布问慎。 她就那樣靜靜地躺著萍摊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝴乔。 梳的紋絲不亂的頭發(fā)上记餐,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音薇正,去河邊找鬼片酝。 笑死囚衔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雕沿。 我是一名探鬼主播练湿,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼审轮!你這毒婦竟也來了肥哎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疾渣,失蹤者是張志新(化名)和其女友劉穎篡诽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榴捡,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杈女,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吊圾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片达椰。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖项乒,靈堂內(nèi)的尸體忽然破棺而出啰劲,到底是詐尸還是另有隱情,我是刑警寧澤檀何,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布蝇裤,位于F島的核電站,受9級(jí)特大地震影響频鉴,放射性物質(zhì)發(fā)生泄漏猖辫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一砚殿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芝囤,春花似錦似炎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至悯许,卻和暖如春仆嗦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背先壕。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工瘩扼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谆甜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓集绰,卻偏偏與公主長(zhǎng)得像规辱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栽燕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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