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

相关文章
相关标签/搜索