天天看點

移動端網絡優化

一個網絡請求可以簡單分為連接配接伺服器 -> 擷取資料兩個部分。

其中連接配接伺服器前還包括 dns 解析的過程;擷取資料後可能會對資料進行緩存。

1. 不用域名,用 ip 直連

首次域名解析一般需要幾百毫秒,可通過直接向 ip 而非域名請求,節省掉這部分時間,同時可以預防域名劫持等帶來的風險。

當然為了安全和擴充考慮,這個 ip 可能是一個動态更新的 ip 清單,并在 ip 不可用情況下通過域名通路。

2. 伺服器合理部署

伺服器多營運商多地部署,一般至少含三大營運商、南中北三地部署。

配合上面說到的動态 ip 清單,支援優先級,每次根據地域、網絡類型等選擇最優的伺服器 ip 進行連接配接。

對于伺服器端還可以調優伺服器的 tcp 擁塞視窗大小、重傳逾時時間(rto)、最大傳輸單元(mtu)等。

1. 連接配接複用

節省連接配接建立時間,如開啟 keep-alive。

2. 請求合并

即将多個請求合并為一個進行請求,比較常見的就是網頁中的 css image sprites。 如果某個頁面内請求過多,也可以考慮做一定的請求合并。

3. 減小請求資料大小

(1) 對于 post 請求,body 可以做 gzip 壓縮,如日志。

(2) 對請求頭進行壓縮

這個 http 1.1 不支援,spdy 及 http 2.0 支援。 http 1.1 可以通過服務端對前一個請求的請求頭進行緩存,後面相同請求頭用 md5 之類的 id 來表示即可。

4. cdn 緩存靜态資源

緩存常見的圖檔、js、css 等靜态資源。

5. 減小傳回資料大小

(1) 壓縮

一般 api 資料使用 gzip 壓縮,下圖是之前測試的 gzip 壓縮前後對比圖。 

移動端網絡優化

(2) 精簡資料格式

如 json 代替 xml,webp 代替其他圖檔格式。關注公衆号 codekk,回複 20 檢視關于 webp 的介紹。

(3) 對于不同的裝置不同網絡傳回不同的内容 如不同分辨率圖檔大小。

(4) 增量更新

需要資料更新時,可考慮增量更新。如常見的服務端進行 bsdiff,用戶端進行 bspatch。

(5) 大檔案下載下傳

支援斷點續傳,并緩存 http resonse 的 etag 辨別,下次請求時帶上,進而确定是否資料改變過,未改變則直接傳回 304。

6. 資料緩存

緩存擷取到的資料,在一定的有效時間内再次請求可以直接從緩存讀取資料。

1. 預取

包括預連接配接、預取資料。

2. 分優先級、延遲部分請求

将不重要的請求延遲,這樣既可以削峰減少并發、又可以和後面類似的請求做合并。

3. 多連接配接

對于較大檔案,如大圖檔、檔案下載下傳可考慮多連接配接。 需要控制請求的最大并發量,畢竟移動端網絡受限。

優化需要通過資料對比才能看出效果,是以監控系統必不可少,通過前後端的資料監控确定調優效果。

注:伺服器部署方面的優化有參考手 q 和 qzone 去年的技術分享。

繼續閱讀