iOS性能之HTTP2.0

来源:http://www.cnblogs.com/lizheng114/archive/2017/03/14/6543809.html
-Advertisement-
Play Games

在移動互聯網領域蓬勃發展的今天,APP的性能也成為各大公司重點關註的方向,該系列文章主要針對iOS的性能的幾個方面做一些研究。 什麼是HTTP2.0? 什麼是HTTP2.0? 網上很容易搜到關於HTTP2.0的概念的文章,這裡不再累述。 蘋果從iOS9開始支持HTTP2.0,對iOS開發人員來說,即 ...


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

  • 什麼是HTTP2.0?

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

蘋果從iOS9開始支持HTTP2.0,對iOS開發人員來說,即是iOS9開始,NSURLSession可以支持HTTP2.0

因為蘋果已經打算廢棄NSURLConnection,所以NSURLConnection不能支持HTTP2.0

UIWebView也不能支持HTTP2.0(當然,如果你使用UIWebView,然後使用NSURLProtocol,在NSURLProtocol中使用NSURLSession,這樣也是可以支持HTTP2.0的),WKWebView是可以的。

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

主要有幾點:

1. 相同的Host占用一個TCP鏈接

2. 請求可以設置優先順序

3. 採用二進位協議,而不是之前的文本協議

4. 多路復用

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 單例模式是非常常見的設計模式,其含義也很簡單,一個類給外部提供一個唯一的實例。下文所有的代碼均在 "github" 源碼整個項目不僅僅有設計模式,還有其他JavaSE知識點,歡迎Star,Fork 單例模式的UML圖 單例模式的關鍵點 通過上面的UML圖,我們可以看出單例模式的特點如下: 1. 構造 ...
  • 之前寫了篇Android OkHttp完全解析 是時候來瞭解OkHttp了,其實主要是作為okhttp的普及文章,當然裡面也簡單封裝了工具類,沒想到關註和使用的人還挺多的,由於這股熱情,該工具類中的方法也是劇增,各種重載方法,以致於使用起來極不方便,實在慚愧。 於是,在這個周末,抽點時間對該工具類... ...
  • 指定移動的像素的上偏移值 //實現男、女的單選控制項 ...
  • 轉載請標明出處: "http://www.cnblogs.com/why168888/p/6548544.html" 本文出自: "【Edwin博客園】" 如何簽名: jarsgner verbose keystore[keystorePath] singnedjar [apkOut] [apkln ...
  • 偶爾才用一次的JEB, 出現 “Controller沒有響應或者無法訪問, JEB即將終止.” 也懶得去逆了。直接用ProcessHacker找到對應的線程掛起即可。當然這隻是臨時的辦法。。我也只是臨時用用。有興趣的自己做工具吧。 ...
  • Swift _ OC _ 混編 在OC環境下使用Swift. "GitHub源碼" ...
  • 前言 自Weex發佈伊始, 其口號 "Write Once, Run Everywhere"就吸引了大批前端與客戶端程式猿紛紛入坑, 我也不能獨善其中. 就我目前所學習Weex的經驗在此記錄一下, 由於我是一名剛入行不久iOS開發者, 所以這篇博客含金量不高, 下麵就簡單闡述下如何將Weex初步集成 ...
  • CoreAnimation 寄宿圖 博客園makedown支持不佳,如有需要請進 "GitHub" . 寄宿圖:圖層中所包含的圖 by:旭寶愛吃魚     針對於寄宿圖我在這裡只討論contents屬性以及Custom Drawing. contents &n ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...