APP端的網(wǎng)絡優(yōu)化(DNS優(yōu)化脚粟,HTTP優(yōu)化)

一覆旱、使用httpDNS優(yōu)化DNS解析和緩存

一般來說在App內(nèi)用域名發(fā)送請求都要經(jīng)過DNS解析出ip,然后再根據(jù)ip去拿對應的資源核无,這個過程中扣唱,如果LocalDNS中存在這個域名對應的ip,就會直接返回這個ip团南,類似于App內(nèi)做緩存噪沙。如果不存在,才會去權威DNS查詢改訪問哪個ip吐根,然后查詢到的ip會在LocalDNS中做緩存正歼。也就是說,如果我們要訪問新浪http://api.weibo.cn拷橘,如果LocalDNS里面有該域名對應的ip局义,就直接返回了ip了。(DNS基礎知識:http://www.reibang.com/p/a73e963b63b1


  1冗疮、這里存在兩個問題

    如果之前訪問api.weibo.cn的是聯(lián)通用戶萄唇,現(xiàn)在新用戶使用電信來訪問api.weibo.cn,由于localDNS緩存的存在赌厅,不會去查詢新浪的權威DNS穷绵,這樣返回的ip是聯(lián)通這個運營商的ip,從而會使得用戶出現(xiàn)訪問變慢等狀況特愿。緩存還會導致一點就是仲墨,當權威DNS將域名與ip的映射發(fā)生改變之后,由于LocalDNS緩存沒有及時改變揍障,用戶就會訪問到錯誤的服務器目养,或者直接訪問不到資源。

    很多三四級運營商會把運營解析指向他們的緩存服務器上毒嫡,并把網(wǎng)頁里面的廣告替換成他們自己的癌蚁,或者內(nèi)嵌他們自己的廣告。(之前做的APP出現(xiàn)過這樣的情況,投訴之后會好上一段時間努释,但是過段時間又會出現(xiàn)廣告)碘梢。


    竟然DNS解析存在問題,那有沒有一種調(diào)度精準伐蒂、成本低廉煞躬、配置方便的基于域名的流量調(diào)度系統(tǒng)呢?答案是肯定的逸邦。HttpDNS基于Http協(xié)議和域名解析的流量調(diào)度解決方案恩沛,可以在很大程度上防止上面的問題出現(xiàn)。

  HttpDNS原理:

    A缕减、客戶端直接訪問HttpDNS接口雷客,獲取業(yè)務在域名配置管理系統(tǒng)上配置的訪問延遲最優(yōu)的IP。(基于容災考慮桥狡,app內(nèi)肯定是需要保留使用運營商LocalDNS解析域名方式的搅裙。)

    B、客戶端向獲取到的IP后就向直接往此IP發(fā)送業(yè)務協(xié)議請求总放。以Http請求為例呈宇,通過在header中指定host字段,向HttpDNS返回的IP發(fā)送標準的Http請求即可局雄。

  總的來說甥啄,采用HttpDNS來解析域名,就繞過了三四級運營商解析域名會出現(xiàn)的問題炬搭,在HttpDNS返回了正確的ip之后蜈漓,我們是直接采用ip去進行http請求,只需要關注通信內(nèi)容的安全即可宫盔。


  2融虽、基于HttpDNS擴展

    A、在App內(nèi)維護一個Serve IP List灼芭。把每次App從HttpDNS取到的ip存儲進入該數(shù)組有额,并設置權重,理論上來說從HttpDns解析下來的ip權重是最大的彼绷。這個List可以在App啟動的時候巍佑,進行更新,同時取出本地緩存的Serve IP List的權重最大的ip進行數(shù)據(jù)的初始化操作(如果第一次啟動寄悯,沒有該List的話萤衰,就使用LocalDNS進行解析)。

Serve IP List里面的權重設置機制猜旬,很明顯的一點就是從DNS解析出來的ip具有最大的權重脆栋,每次從List里面取ip應該要取權重最大的ip倦卖。列表中的ip也是需要可以動態(tài)更新配置的,根據(jù)連接或者服務的成功失敗來進行動態(tài)調(diào)整椿争,這樣即使DNS解析失敗怕膛,用戶在一段時間后也會取到合適的ip進行訪問。

    B丘薛、對ip進行數(shù)據(jù)統(tǒng)計嘉竟。在所有app內(nèi)統(tǒng)計每個ip進行請求所需平均時間邦危、最長時間洋侨、最短時間、請求成功次數(shù)倦蚪、失敗次數(shù)希坚,需要注意的是,要區(qū)分網(wǎng)絡環(huán)境進行統(tǒng)計陵且,Wifi裁僧、4G、3G慕购,對在不同的網(wǎng)絡環(huán)境下數(shù)據(jù)優(yōu)秀的ip進行存儲聊疲,下發(fā)到App里面使用起來。這樣每次啟動App時可以對收集起來的ip根據(jù)不同的網(wǎng)絡環(huán)境進行測速沪悲,選擇最好的ip進行請求获洲。需要注意的是,在網(wǎng)絡環(huán)境切換的時候殿如,必須要重新進行速度測試贡珊。做到這一步,可以節(jié)約DNS解析時間涉馁,以及劫持的問題门岔。


    C、將圖片烤送、音頻等資源放到單獨的服務器里面寒随,與其他資源分開。

第一個是多個域名可以增加并行下載條數(shù)帮坚,因為客戶端對同一個域的域名下載條數(shù)是有限制的妻往,所以多個域就會增加并行下載條數(shù),從而加快加載速度叶沛。當然二級域名也不能使用太多蒲讯,因為太多要考慮到dns的解析花費的時間。

第二個是方便管理灰署,一般來說判帮,圖片在站點的加載中是最占帶寬的局嘁,可以用獨立服務器方便后期管理;還可以使用異步加載的方式晦墙,增強用戶體驗悦昵。同時是圖片多是靜態(tài)內(nèi)容,可以更好的使用CDN加速晌畅。

第三是如果使用了獨立服務器的話但指,在安全設置上可以有差別的針對設置,很是方便抗楔。

    D棋凳、在防止劫持這一塊,需要注意把資源的后綴名去掉连躏,比如說.mp3\.json這樣的后綴剩岳,以免擊中運營商的攔截。


二入热、資源優(yōu)化

  資源優(yōu)化基本就是盡可能的縮小傳輸數(shù)據(jù)的大小拍棕,首先是圖片大小的解決方案。

    1勺良、在一定程度上使用webp來代替jpg绰播、png圖片

    上圖就是各種圖片同等質(zhì)量下的大小,其中webp是最小的尚困。當我們下載圖片展示的時候蠢箩,如果在一定程度上使用webp圖片,就能大大減少用戶流量的損失尾组,以及下載圖片的所需時間忙芒。

    一般來說,會在App內(nèi)固定使用幾種尺寸來做展示圖讳侨,比如說呵萨,banner圖是640*640,cell展示圖可能是320*320跨跨、280*280潮峦,類似頭像的可能是80*80等。需要注意的是勇婴,webp的圖片要通過解析才能成為可用的jpg圖片忱嘹,在iOS開發(fā)中,可以使用SDWebImage框架進行解析耕渴,webp->NSData->Image拘悦,app內(nèi)解析是肯定需要花費一定時間和性能的。

    根據(jù)實際使用的反饋情況橱脸,發(fā)現(xiàn)在wifi條件下础米,超過300*300的圖片使用webp圖片分苇,解析時間+下載時間是比直接使用jpg\png圖片要快的,并且在流量方面也是消耗很小屁桑。低于300*300的可以直接下載使用jpg\png圖片医寿。

    在4G條件下,用戶可能會對流量比較敏感蘑斧,建議都走webp圖片靖秩。


    2、可以使用ProtocolBuffer代替Json進行數(shù)據(jù)傳輸

    Protocolbuffer(簡稱Protobuf或PB)是由Google推出的一種數(shù)據(jù)交換格式竖瘾,它獨立于語言沟突,獨立于平臺。Google 提供了三種語言的實現(xiàn):java准浴、c++ 和 python事扭,每一種實現(xiàn)都包含了相應語言的編譯器以及庫文件±趾幔可以把它用于分布式應用之間的數(shù)據(jù)通信或者異構環(huán)境下的數(shù)據(jù)交換。與傳統(tǒng)的XML和JSON不同的是今野,它是一種二進制格式葡公,免去了文本格式轉(zhuǎn)換的各種困擾,并且轉(zhuǎn)換效率非程跛快催什,由于它的跨平臺、跨編程語言的特點宰睡,讓它越來越普及蒲凶,尤其是網(wǎng)絡數(shù)據(jù)交換方面日趨成為一種主流。

    在tcp中拆内,我們可以使用?ProtocolBuffer代替Json進行數(shù)據(jù)傳輸旋圆,因為ProtocolBuffer數(shù)據(jù)比Json更小,也是跨平臺的麸恍,序列號與反序列化也很簡單灵巧。在實際項目中,當數(shù)據(jù)變小的時候會顯著提高傳輸速度抹沪。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刻肄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子融欧,更是在濱河造成了極大的恐慌敏弃,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件噪馏,死亡現(xiàn)場離奇詭異麦到,居然都是意外死亡虹茶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門隅要,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝴罪,“玉大人,你說我怎么就攤上這事步清∫牛” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵廓啊,是天一觀的道長欢搜。 經(jīng)常有香客問我,道長谴轮,這世上最難降的妖魔是什么炒瘟? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮第步,結果婚禮上疮装,老公的妹妹穿的比我還像新娘。我一直安慰自己粘都,他們只是感情好廓推,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著翩隧,像睡著了一般樊展。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堆生,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天专缠,我揣著相機與錄音,去河邊找鬼淑仆。 笑死涝婉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的糯景。 我是一名探鬼主播嘁圈,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蟀淮!你這毒婦竟也來了最住?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤怠惶,失蹤者是張志新(化名)和其女友劉穎涨缚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡脓魏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年兰吟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茂翔。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡混蔼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出珊燎,到底是詐尸還是另有隱情惭嚣,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布悔政,位于F島的核電站晚吞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谋国。R本人自食惡果不足惜槽地,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芦瘾。 院中可真熱鬧捌蚊,春花似錦、人聲如沸旅急。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽藐吮。三九已至,卻和暖如春逃贝,著一層夾襖步出監(jiān)牢的瞬間谣辞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工沐扳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓岛杀,卻偏偏與公主長得像搂擦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子杨拐,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

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