利用 Network Profiler 檢查網(wǎng)絡(luò)流量
-
接口設(shè)計(jì)
-
API設(shè)計(jì)
App 與 Server 之間的 API 設(shè)計(jì)要考慮網(wǎng)絡(luò)請(qǐng)求的頻次矗蕊,資源的狀態(tài)等璧微。以便 App 可以以較少的請(qǐng)求來(lái)完成業(yè)務(wù)需求和界面的展示霉咨。
比如注冊(cè)登錄一般會(huì)有兩個(gè) API,但是設(shè)計(jì) API 時(shí)應(yīng)該給注冊(cè)接口包含一個(gè)隱式的登錄整份。來(lái)避免 App 在注冊(cè)后還得請(qǐng)求一次登錄接口(有可能失敗腹泌,從而導(dǎo)致業(yè)務(wù)流程失敗)。
比如有些請(qǐng)求可能包含了幾種小請(qǐng)求疮胖,可以單獨(dú)設(shè)計(jì)個(gè)接口,減少請(qǐng)求次數(shù)。
-
Gzip 壓縮
使用 Gzip 來(lái)壓縮 request 和 response澎灸,減少傳輸數(shù)據(jù)量院塞,從而減少流量消耗。
考慮使用 Protocol Buffer/flatBuffer 代替 JSON
-
圖片的 Size
圖片相對(duì)于接口請(qǐng)求來(lái)說(shuō)性昭,數(shù)據(jù)量要大得多拦止。故而也是需要優(yōu)化的一個(gè)點(diǎn)∶拥撸可以在獲取圖片時(shí)告知服務(wù)器需要的圖片的寬高创泄,以便服務(wù)器給出合適的圖片,避免浪費(fèi)括蝠。以七牛為例鞠抑,可以在請(qǐng)求圖片的 url 中添加諸如質(zhì)量,格式忌警,width搁拙,height 等 path 來(lái)獲取合適的圖片資源。對(duì)于不同的設(shè)備不同網(wǎng)絡(luò)返回不同的內(nèi)容不同分辨率圖片法绵。
-
增量更新
需要數(shù)據(jù)更新時(shí)箕速,可考慮增量更新。如常見(jiàn)的服務(wù)端進(jìn)行 bsdiff朋譬,客戶端進(jìn)行 bspatch盐茎。
-
大文件下載
支持?jǐn)帱c(diǎn)續(xù)傳,并緩存 Http Resonse 的 ETag 標(biāo)識(shí)徙赢,下次請(qǐng)求時(shí)帶上字柠,從而確定是否數(shù)據(jù)改變過(guò),未改變則直接返回 304狡赐。
-
網(wǎng)絡(luò)緩存窑业,減少延遲節(jié)省流量。
-
打包網(wǎng)絡(luò)請(qǐng)求
當(dāng)接口設(shè)計(jì)不能滿足業(yè)務(wù)需求時(shí)枕屉。例如可能一個(gè)界面需要請(qǐng)求多個(gè)接口常柄,或是網(wǎng)絡(luò)良好,處于 Wifi 狀態(tài)下時(shí)我們想獲取更多的數(shù)據(jù)等搀擂。這時(shí)就可以打包一些網(wǎng)絡(luò)請(qǐng)求西潘,例如請(qǐng)求列表的同時(shí),獲取 Header 點(diǎn)擊率較高的的 item 項(xiàng)的詳情數(shù)據(jù)哨颂,響應(yīng)體里包含更多的內(nèi)容喷市。
-
監(jiān)聽(tīng)相關(guān)狀態(tài)
監(jiān)聽(tīng)設(shè)備的狀態(tài):休眠狀態(tài)、充電狀態(tài)咆蒿、網(wǎng)絡(luò)狀態(tài)东抹,結(jié)合 JobScheduler 來(lái)根據(jù)實(shí)際情況做網(wǎng)絡(luò)請(qǐng)求。比方說(shuō) Splash 閃屏廣告圖片沃测,可以在連接到 Wifi 時(shí)下載緩存到本地; 新聞?lì)惖?App 可以在充電缭黔,Wifi 狀態(tài)下做離線緩存。
-
弱網(wǎng)優(yōu)化
除了正常的網(wǎng)絡(luò)優(yōu)化蒂破,還需考慮到弱網(wǎng)情況下 App 的表現(xiàn)馏谨。
一般來(lái)說(shuō),網(wǎng)絡(luò)延遲在 60ms 內(nèi)是 OK 的附迷,超過(guò) 200ms 就比較糟糕了惧互。弱網(wǎng)優(yōu)化,本質(zhì)上是在弱網(wǎng)的情況下能讓用戶流暢的使用喇伯。
- 壓縮/減少數(shù)據(jù)傳輸量
- 利用緩存減少網(wǎng)絡(luò)傳輸
- 針對(duì)弱網(wǎng)(移動(dòng)網(wǎng)絡(luò))喊儡,不自動(dòng)加載圖片
- 界面先反饋,請(qǐng)求延遲提交稻据。例如艾猜,用戶點(diǎn)贊操作,可以直接給出界面的點(diǎn)贊成功的反饋捻悯,使用 JobScheduler 在網(wǎng)絡(luò)情況較好的時(shí)候打包請(qǐng)求匆赃。
建立取消機(jī)制,頁(yè)面跳走了要取消請(qǐng)求今缚,且不再接收數(shù)據(jù)算柳。
GET 請(qǐng)求失敗增加重試機(jī)制,POST 請(qǐng)求可能因?yàn)檠訒r(shí)姓言,不要有重試機(jī)制瞬项,要防止頻繁請(qǐng)求相同的接口。重試機(jī)制必須要有明顯的結(jié)束條件何荚。
避免重復(fù)上傳與下載滥壕。避免輪詢。
IP 直連兽泣,避免 DNS 解析绎橘,即耗時(shí)又有被劫持風(fēng)險(xiǎn)。