您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶(hù)?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

實(shí)踐調(diào)研iOS HTTP2.0的網(wǎng)絡(luò)性能優(yōu)化效果

大?。?/span>0.3 MB 人氣: 2017-09-25 需要積分:1

  前面的文章也提到了目前的移動(dòng)端網(wǎng)絡(luò)常見(jiàn)性能問(wèn)題,以及對(duì)應(yīng)的優(yōu)化策略,如果把HTTP1.1 替換為 HTTP2.0,可以說(shuō)是網(wǎng)絡(luò)性能優(yōu)化的一步大棋。這幾天對(duì) iOS HTTP2.0 進(jìn)行了簡(jiǎn)單的調(diào)研、測(cè)試,在此做個(gè)簡(jiǎn)單的總結(jié)

  本文的大概思路是介紹 HTTP1.1 的弊端、HTTP2.0 的優(yōu)勢(shì)、HTTP2.0 的協(xié)商機(jī)制、iOS 客戶(hù)端如何接入 HTTP2.0,以及如何對(duì)其進(jìn)行調(diào)試。主要還是加深記憶、方便后期查閱,文末的資料相比本文或許是更有價(jià)值的。

  HTTP 1.1

  雖然 HTTP1.1 默認(rèn)是開(kāi)啟 Keep-Alive 長(zhǎng)連接的,一定程度上彌補(bǔ)了HTTP1.0每次請(qǐng)求都要?jiǎng)?chuàng)建連接的缺點(diǎn),但是依然存在 head of line blocking,如果出現(xiàn)一個(gè)較差的網(wǎng)絡(luò)請(qǐng)求,會(huì)影響后續(xù)的網(wǎng)絡(luò)請(qǐng)求。為什么呢?如果你發(fā)出1、2、3 三個(gè)網(wǎng)絡(luò)請(qǐng)求,那么 Response 的順序 2、3 要在第一個(gè)網(wǎng)絡(luò)請(qǐng)求之后,以此類(lèi)推

  針對(duì)同一域名,在請(qǐng)求較多的情況下,HTTP1.1 會(huì)開(kāi)辟多個(gè)連接,據(jù)說(shuō)瀏覽器一般是6-8 個(gè),較多連接也會(huì)導(dǎo)致延遲增大,資源消耗等問(wèn)題

  HTTP1.1 不安全,可能存在被篡改、被竊聽(tīng)、被偽裝等問(wèn)題。當(dāng)然,前陣子 Apple 推廣 HTTPS 的時(shí)候,相信很多人已經(jīng)接入 HTTPS

  HTTP 的頭部沒(méi)有壓縮,header 的大小也是傳輸?shù)呢?fù)擔(dān),帶來(lái)更多的流量消耗和傳輸延遲。并且很多 header 是相同的,重復(fù)傳輸是沒(méi)有必要的。

  服務(wù)端無(wú)法主動(dòng)推送資源到客戶(hù)端

  HTTP1.1的格式是文本格式,基于文本做一些擴(kuò)展、優(yōu)化相對(duì)比較困難,但是文本格式易于閱讀和調(diào)試,但HTTPS之后,也變成二進(jìn)制格式了,這個(gè)優(yōu)勢(shì)也不復(fù)存在

  HTTP 2.0

  在 HTTP2.0中,上面的問(wèn)題幾乎都不存在了。HTTP2.0 的設(shè)計(jì)來(lái)源于 Google 的 SPDY 協(xié)議,如果對(duì) SPDY 協(xié)議不了解的話(huà),也可以先對(duì) SPDY 進(jìn)行了解,不過(guò)這不影響繼續(xù)閱讀本文

  HTTP 2.0 使用新的二進(jìn)制格式:基本的協(xié)議單位是幀,每個(gè)幀都有不同的類(lèi)型和用途,規(guī)范中定義了10種不同的幀。例如,報(bào)頭(HEADERS)和數(shù)據(jù)(DATA)幀組成了基本的HTTP 請(qǐng)求和響應(yīng);其他幀例如 設(shè)置(SETTINGS),窗口更新(WINDOW_UPDATE), 和推送承諾(PUSH_PROMISE)是用來(lái)實(shí)現(xiàn)HTTP/2的其他功能。那些請(qǐng)求和響應(yīng)的幀數(shù)據(jù)通過(guò)流來(lái)進(jìn)行數(shù)據(jù)交換。新的二進(jìn)制格式是流量控制、優(yōu)先級(jí)、server push等功能的基礎(chǔ)

  流(Stream):一個(gè)Stream是包含一條或多條信息、ID和優(yōu)先級(jí)的雙向通道

  消息(Message):消息由幀組成

  幀(Frame):幀有不同的類(lèi)型,并且是混合的。他們通過(guò)stream id被重新組裝進(jìn)消息中

  實(shí)踐調(diào)研iOS HTTP2.0的網(wǎng)絡(luò)性能優(yōu)化效果

  多路復(fù)用:也就是連接共享,剛才說(shuō)到 HTTP1.1的 head of line blocking,那么在多路復(fù)用的情況下,blocking 已經(jīng)不存在了。每個(gè)連接中 可以包含多個(gè)流,而每個(gè)流中交錯(cuò)包含著來(lái)自?xún)啥说膸?。也就是說(shuō)同一個(gè)連接中是來(lái)自不同流的數(shù)據(jù)包混合在一起,如下圖所示,每一塊代表幀,而相同顏色塊來(lái)自同一個(gè)流,每個(gè)流都有自己的 ID,在接收端會(huì)根據(jù) ID 進(jìn)行重裝組合,就是通過(guò)這樣一種方式來(lái)實(shí)現(xiàn)多路復(fù)用。

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶(hù)評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?