《圖解HTTP》這本書真的很簡潔,應(yīng)付工作XX 足夠了吧
移動(dòng)網(wǎng)絡(luò)延遲高的原因
喚醒延遲
在移動(dòng)網(wǎng)絡(luò)下,手機(jī)要接入網(wǎng)絡(luò),必須先向控制平臺發(fā)送申請。只有當(dāng)控制平臺將手機(jī)切換到Active狀態(tài),手機(jī)才能進(jìn)行通信,這一過程在3G網(wǎng)絡(luò)下消耗的時(shí)間一般在500-2500ms之間,我們稱之為喚醒延遲。這是一個(gè)造成移動(dòng)網(wǎng)絡(luò)延遲的原因。
HTTP延遲
在APP開發(fā)中,我們會經(jīng)常用到HTTP協(xié)議,HTTP延遲就是在使用這個(gè)協(xié)議時(shí)產(chǎn)生的。
一個(gè)HTTP請求從客戶端發(fā)送到服務(wù)端的過程中,需要進(jìn)行域名查詢,這時(shí)客戶端就會發(fā)起一個(gè)DNS Query。這個(gè)過程所需的時(shí)間和ISP(互聯(lián)網(wǎng)服務(wù)供應(yīng)商)、請求頁面知名度、是否存在緩存以及服務(wù)器的響應(yīng)時(shí)間都有關(guān)系??蛻舳嗽谀玫浇馕龀龅腎P后,還要經(jīng)過我們熟知的TCP三次握手,這個(gè)過程需要耗時(shí)幾百毫秒,甚至可能達(dá)到幾秒。TCP握手完成后,還需發(fā)送HTTP請求傳遞我們的參數(shù),取得服務(wù)器返回的數(shù)據(jù)。如果是HTTPS協(xié)議的話還需要進(jìn)行TLS握手,這就又要增加兩輪的延遲等待。
所有的這些都需要消耗時(shí)間,再加上RRC控制平臺喚醒手機(jī)到Active狀態(tài)所要消耗的時(shí)間,形成以下3G網(wǎng)絡(luò)和4G網(wǎng)絡(luò)的對比圖。

從表中我們可以看到:在沒有計(jì)算服務(wù)器反應(yīng)時(shí)間的情況下,3G網(wǎng)絡(luò)下一條HTTP請求需要600-3500ms,4G網(wǎng)絡(luò)下大概也需要0.5s。
核心網(wǎng)絡(luò)延遲
下圖是在移動(dòng)網(wǎng)絡(luò)下,一個(gè)手機(jī)向服務(wù)器傳輸數(shù)據(jù)的完整過程。
首先,手機(jī)需要切換到Active狀態(tài)才能正常通信。手機(jī)向無線接入網(wǎng)絡(luò)發(fā)送一條通信請求,無線接入網(wǎng)絡(luò)收到后,給手機(jī)分配通信資源。這一步驟在3G網(wǎng)絡(luò)最多需要花費(fèi)2s,手機(jī)切換到Active狀態(tài)后,開始向無線接入網(wǎng)絡(luò)傳輸數(shù)據(jù),基站無線接入網(wǎng)絡(luò)收到后把數(shù)據(jù)發(fā)送給服務(wù)網(wǎng)關(guān),服務(wù)網(wǎng)關(guān)將數(shù)據(jù)傳給數(shù)據(jù)網(wǎng)關(guān),數(shù)據(jù)網(wǎng)關(guān)再傳輸給服務(wù)器。
我們再看看服務(wù)器收到數(shù)據(jù)后給手機(jī)返回?cái)?shù)據(jù)的通信過程,如圖所示:
服務(wù)器將數(shù)據(jù)傳給數(shù)據(jù)網(wǎng)關(guān),數(shù)據(jù)網(wǎng)關(guān)把數(shù)據(jù)交給服務(wù)網(wǎng)關(guān),這時(shí)服務(wù)網(wǎng)關(guān)并不知道這設(shè)備在哪,只有把這個(gè)任務(wù)交給無線接入網(wǎng)絡(luò),無線接入網(wǎng)絡(luò)找到設(shè)備后將手機(jī)切換到Active狀態(tài)準(zhǔn)備接受數(shù)據(jù),然后告訴服務(wù)網(wǎng)關(guān)可以發(fā)送數(shù)據(jù)了,服務(wù)網(wǎng)關(guān)收到指令后將數(shù)據(jù)交給無線接入網(wǎng)絡(luò),無線接入網(wǎng)絡(luò)再將數(shù)據(jù)發(fā)給手機(jī)。這樣一次通信才算是最終完成。
我們只想完成一次請求,而在這傳輸過程中我們卻不得不忍受各種各樣的延遲,包括路由選擇延遲、喚醒延遲、控制平臺延遲、骨干網(wǎng)絡(luò)延遲、用戶平臺延遲等。
如何降低延遲
提前喚醒
如果對速度要求很高,我們可以提前喚醒手機(jī),并使其一直處于喚醒狀態(tài),當(dāng)然這是以損耗電池為代價(jià)的。另外從用戶體驗(yàn)上來說,對于超過2s的請求都應(yīng)該給一個(gè)進(jìn)度狀態(tài)。
數(shù)據(jù)緩存
最快的請求就是不請求。網(wǎng)絡(luò)通信的延遲是不可以避免的,但是對于已經(jīng)請求過的數(shù)據(jù)請務(wù)必緩存下來,在下次再次訪問時(shí)直接從本地獲取。這樣不僅能讓用戶有更流暢的操作,即使是在斷網(wǎng)的情況下也能使用APP。
壓縮資源
GZIP壓縮資源。GZIP壓縮一般對純文本內(nèi)容可壓縮到原大小的40%,這樣可以有效減少服務(wù)器帶寬占用,提高我們我們的請求速度。
使用WebP圖片格式
使用合適的圖片格式。一般圖片資源至少占整個(gè)APP數(shù)據(jù)量的50%以上,所以壓縮圖片大小對提高性能也是非常重要的。這里推薦使用WebP圖片格式,在質(zhì)量相同的情況下,WebP格式圖片的體積要比JPEG格式圖片小40%。
使用不同策略
現(xiàn)在2G,3G,4G網(wǎng)絡(luò)并存,網(wǎng)絡(luò)速度差距也很大,針對每種網(wǎng)絡(luò)應(yīng)該有不同的應(yīng)對策略。比如2G網(wǎng)絡(luò)不自動(dòng)打開圖片,3G,4G網(wǎng)絡(luò)詢問是否播放視頻等。
使用CDN
在全國各地多布設(shè)CDN加速節(jié)點(diǎn),特別是網(wǎng)絡(luò)流量比較大的區(qū)域,也能有效緩解核心網(wǎng)絡(luò)所帶來的延遲。
-END-
原文鏈接:blog.wilddog.com
本站內(nèi)容采用知識共享署名 4.0 國際許可協(xié)議進(jìn)行許可。


