優(yōu)化DNS解析和緩存
由于我們的App網(wǎng)絡(luò)服務(wù)主要基于TCP連接瞧挤,為了將DNS時間降至最低闷沥,我們內(nèi)置了Server IP列表,該列表可以在App啟動服務(wù)中下發(fā)更新瘫证。App啟動后的首次網(wǎng)絡(luò)服務(wù)會從Server IP列表中取一個IP地址進(jìn)行TCP連接揉阎,同時DNS解析會并行進(jìn)行,DNS成功后痛悯,會返回最適合用戶網(wǎng)絡(luò)的Server IP余黎,那么這個Server IP會被加入到Server IP列表中被優(yōu)先使用重窟。
網(wǎng)絡(luò)質(zhì)量檢測
針對網(wǎng)絡(luò)連接和讀寫操作的超時時間载萌,我們提出了網(wǎng)絡(luò)質(zhì)量檢測機(jī)制。目前做到的是根據(jù)用戶是在2G/3G/4G/Wi-Fi的網(wǎng)絡(luò)環(huán)境來設(shè)置不同的超時參數(shù),以及網(wǎng)絡(luò)服務(wù)的并發(fā)數(shù)量扭仁。2G/3G/4G網(wǎng)絡(luò)環(huán)境對并發(fā)TCP連接的數(shù)量是有限制的(2G網(wǎng)絡(luò)下運(yùn)營商經(jīng)常只能允許單個Host一個TCP連接)垮衷,因此網(wǎng)絡(luò)服務(wù)重要參數(shù)能夠根據(jù)網(wǎng)絡(luò)質(zhì)量狀況來動態(tài)設(shè)定對性能和體驗都非常重要。
提供網(wǎng)絡(luò)服務(wù)優(yōu)先級和依賴機(jī)制
由于網(wǎng)絡(luò)對并發(fā)TCP連接的限制乖坠,就需要能夠控制不必要的網(wǎng)絡(luò)服務(wù)數(shù)量搀突,因此我們在通訊模塊中加入了網(wǎng)絡(luò)服務(wù)優(yōu)先級和依賴機(jī)制。發(fā)送一個網(wǎng)絡(luò)服務(wù)熊泵,可以設(shè)置它的優(yōu)先級仰迁,高優(yōu)先級的服務(wù)優(yōu)先使用長連接, 低優(yōu)先級的就是用短連接顽分。長連接由于是從長連接池中取到的TCP連接徐许,因此節(jié)省了TCP連接時間。
網(wǎng)絡(luò)服務(wù)依賴機(jī)制是指可以設(shè)置數(shù)個服務(wù)的依賴關(guān)系卒蘸,即主從服務(wù)雌隅。假設(shè)一個App頁面要發(fā)多個服務(wù),主服務(wù)成功的情況下缸沃,才去發(fā)子服務(wù)恰起,如果主服務(wù)失敗了,自服務(wù)就無需再關(guān)心成功或者失敗趾牧,會直接被取消检盼。如果主服務(wù)成功了,那么子服務(wù)就會自動觸發(fā)翘单。
提供網(wǎng)絡(luò)服務(wù)重發(fā)機(jī)制
移動網(wǎng)絡(luò)不穩(wěn)定梯皿,如果一次網(wǎng)絡(luò)服務(wù)失敗,就立刻反饋給用戶你失敗了县恕,體驗并不友好东羹。我們提供了網(wǎng)絡(luò)服務(wù)重發(fā)機(jī)制,即當(dāng)網(wǎng)絡(luò)服務(wù)在連接失敗忠烛、寫Request失敗属提、讀Response失敗時自動重發(fā)服務(wù);長連接失敗時就用短連接來做重發(fā)補(bǔ)償美尸,短連接服務(wù)失敗時當(dāng)然還是用短連接來補(bǔ)償冤议。這種機(jī)制增加了用戶體驗到的服務(wù)成功概率。
減少數(shù)據(jù)傳輸量
我們優(yōu)化了TCP服務(wù)Payload數(shù)據(jù)的格式和序列化/反序列化算法师坎,從自定義格式轉(zhuǎn)換到了Protocol Buffer數(shù)據(jù)格式恕酸,效果非常明顯。序列化/反序列算法也做了調(diào)整胯陋,如果大家使用JSON數(shù)據(jù)格式蕊温,選用一個高效的反序列化算法袱箱,針對真實業(yè)務(wù)數(shù)據(jù)進(jìn)行測試,收益明顯义矛。
優(yōu)化海外網(wǎng)絡(luò)性能
海外網(wǎng)絡(luò)性能的優(yōu)化手段主要是通過花錢发笔,例如CDN加速,提高帶寬凉翻,實現(xiàn)動靜資源分離了讨,對于App中的Hybrid模塊優(yōu)化效果非常明顯。
TestBird