iOS性能之HTTP2.0

在移動互聯網領域蓬勃發展的今天,APP的性能也成爲各大公司重點關注的方向,該系列文章主要針對iOS的性能的幾個方面作一些研究。html

  • 什麼是HTTP2.0?

網上很容易搜到關於HTTP2.0的概念的文章,這裏再也不累述。ios

蘋果從iOS9開始支持HTTP2.0,對iOS開發人員來講,便是iOS9開始,NSURLSession能夠支持HTTP2.0網絡

由於蘋果已經打算廢棄NSURLConnection,因此NSURLConnection不能支持HTTP2.0多線程

UIWebView也不能支持HTTP2.0(固然,若是你使用UIWebView,而後使用NSURLProtocol,在NSURLProtocol中使用NSURLSession,這樣也是能夠支持HTTP2.0的),WKWebView是能夠的。app

  • HTTP2.0相對HTTP1.1的優點是什麼?

主要有幾點:性能

1. 相同的Host佔用一個TCP連接spa

2. 請求能夠設置優先級線程

3. 採用二進制協議,而不是以前的文本協議htm

4. 多路複用blog

5. 部壓縮

 

這幾點優點裏面,我我的認爲最爲重要的,就是多路複用頭部壓縮,正是這兩項優點,讓請求的性能獲得了極大的提高。

  • 多路複用

什麼是多路複用呢?在HTTP1.1時代,一個TCP連接能夠發送多個請求,可是須要排隊,一個一個的發送(遵循FIFO的原則),這就很容易產生阻塞(傳說中的head-of-line blocking),以下圖:

 

能夠看到,相同的connectionId裏面的多個請求,都是串行的(Timeline-Start time那一欄),因此,一旦有某個請求阻塞了,後面的請求都不能繼續進行。

到了HTTP2.0,在一個TCP連接中,請求再也不須要排隊,而是輪詢發送的,以下圖:

 

相同的connectionid裏面的多個請求,幾乎都是同時發起的(能夠想象成單CPU,多線程的CPU輪詢機制),這樣性能就獲得了極大提升

  • 頭部壓縮

這個概念比較好理解,如今APP的需求也是愈來愈複雜,致使了請求的頭部信息也愈來愈多(Cookie,請求參數等),動輒超過1k,2k,十分影響性能。而HTTP2.0會對請求頭和響應頭作壓縮以提高請求性能。

  • 什麼是TCP連接?

前面有提到HTTP2.0對於一個Host會佔用一個TCP連接,這裏須要簡單介紹下TCP連接。

從底到高來看:

IP協議:對應於網絡層

TCP協議:對應於傳輸層

HTTP協議:對應於應用層

 

TCP在創建連接的過程當中,須要通過三次握手, HTTP協議是創建在TCP協議之上的,不過HTTP是短連接,一旦請求結束,連接要被釋放,可是爲了提高服務端於客戶端之間請求的效率(減小TCP創建連接的性能損耗),因此雖然HTTP連接被釋放了,可是底層TCP連接還在(能夠用wireshark抓包看看)。

可是TCP連接也不是無限多,iOS的NSURLSession是分配的4個TCP連接,MAC是6個。

 

這裏有兩篇比較全面的HTTP2.0的文章:

https://medium.com/apps-and-networking/http-2-makes-media-loading-3-15-times-faster-on-mobile-a455c3e68135#.kxd9z7eq4

 

http://www.floriangoessler.de/ios/2015/08/30/HTTP2-on-iOS.html

相關文章
相關標籤/搜索