在移动互联网领域蓬勃发展的今天,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

iOS性能之HTTP2.0的更多相关文章

  1. 前端必备性能知识 - http2.0

    前端开发中,性能是一定绕不开的,今天就来说一下前后台通信中最重要的一个通道--HTTP2.0 最开始的通讯协议叫http1.0,作为始祖级的它,定义了最基本的数据结构,请求头和请求体,以及每一个字段的 ...

  2. HTTP2.0 简明笔记

    前言 RFC2616发布以来,一直是互联网发展的基石.HTTP协议也成为了可以在任何领域使用的核心协议,基于这个协议人们设计和部署了越来越多的应用.HTTP的简单本质是其快速发展的关键,但随着越来越多 ...

  3. HTTP2.0简明笔记

    版权声明:本文由史燕飞原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/82 来源:腾云阁https://www.qcloud ...

  4. SPDY以及HTTP2.0

    背景介绍 HTTP2.0跟SPDY在不少理念上是相似的,目的都是为了提升HTTP1.1的性能. HTTP2.0将会是业界的标准,比SPDY要完善,今后可能会都转向http2.0而放弃SPDY. SPD ...

  5. 前端性能优化的另一种方式——HTTP2.0

    最近在读一本书叫<web性能权威指南>谷歌公司高性能团队核心成员的权威之作. 一直听说HTTP2.0,对此也仅仅是耳闻,没有具体研读过,这次正好有两个篇章,分别讲HTTP1.1和HTTP2 ...

  6. HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事

    作为一个经常和web打交道的程序员,了解这些协议是必须的,本文就向大家介绍一下这些协议的区别和基本概念,文中可能不局限于前端知识,还包括一些运维,协议方面的知识,希望能给读者带来一些收获,如有不对之处 ...

  7. HTTP2.0那些事

    1. HTTP2.0的前世 http2.0的前世是http1.0和http1.1这两兄弟.虽然之前仅仅只有两个版本,但这两个版本所包含的协议规范之庞大,足以让任何一个有经验的工程师为之头疼.http1 ...

  8. HTTP协议以及HTTP2.0/1.1/1.0区别

    HTTP协议以及HTTP2.0/1.1/1.0区别 一.简介 摘自百度百科: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所 ...

  9. http2.0与http1.X的区别

    此文只是方便重看,原文在:http://www.mamicode.com/info-detail-1199706.html 1.1 HTTP应用场景 http诞生之初主要是应用于web端内容获取,那时 ...

随机推荐

  1. Drawerlayou与ScrollView的介绍

    Drawerlayout侧滑 Drawerlayout是Support Library包中实现了侧滑菜单效果的控件. 滚动条(ScrollView) ScrollView和HorizontalScro ...

  2. Linux内存管理之slab分配器

    slab分配器是什么? 参考:http://blog.csdn.net/vanbreaker/article/details/7664296 slab分配器是Linux内存管理中非常重要和复杂的一部分 ...

  3. PowerDesigner如何把建好的表导入到数据库中,并且把注释也导入进去

    第一次接触这个软件,经过自己的捣鼓和百度,终于可以顺利的导入数据库中了,好开森,希望可以帮助到更多人. 数据库(mysql)其实和sqlserver差不多,以16.5版本为例 1.选中一个PDM项目, ...

  4. 基于basys2驱动LCDQC12864B的verilog设计图片显示

    话不多说先上图 前言 在做这个实验的时候在网上找了许多资料,都是关于使用单片机驱动LCD显示,确实用单片机驱动是要简单不少,记得在FPGA学习交流群里问问题的时候,被前辈指教,说给我最好的指教便是别在 ...

  5. 警告1909。无法创建快捷方式VMware Workstation Pro.Ink。解决方法(附 VMware_workstation 12的安装方法)

    电脑之前装过VMware 10,很长时间没用就卸载了,也没有在意卸载的干不干净,直到最近需要用Linux系统,重新安装了VMware 12,就出现下面这样的情况: 警告1909.无法创建快捷方式VMw ...

  6. MyEclipse - 解决 MyEclipse build workspace慢,validation javascript更慢的问题

    在这个过程中对.projet文件进行了跟踪比对,总算发现这个Build的时候进行Validation是从哪里定义的了.似乎因为我的项目是基于ExtJS2.0.2的web project,所以会提示打开 ...

  7. vs生成配置release自动恢复成debug无法配置的问题

    软件为visual studio 2015,右键单个项目选属性,设置“生成配置”release,保存后,再次右键属性,却发现又自动恢复成debug,怎么回事?是无法配置吗?点击生成试试,果然2b了. ...

  8. Omi教程-组件

    组件 Omi框架完全基于组件体系设计,我们希望开发者可以像搭积木一样制作Web程序,一切皆是组件,组件也可以嵌套子组件形成新的组件,新的组件又可以当作子组件嵌套至任意组件形成新的组件... 简单组件 ...

  9. java io基础(java.io)

    首先流分为输入和输出流,java分为字节流和字符流 1.字节输入流io.InputStream io.InputStream是一个抽象类它实现了Closeable接口的抽象类.那么它的子类(io包下) ...

  10. shiro.ini 配置详解

    引用: [1]开涛的<跟我学shiro> [2]<SpringMVC整合Shiro> [3]<shiro简单配置> [4]Apache shiro集群实现 (一) ...