域名发散

在PC时代,为了保护服务器,浏览器对最大并发数进行了限制,例如 Firefox46 中每一域名下最大连接数为6,IE10 下为8。为了突破这一限制,可以将静态资源置于多个域名下,来提高并发数,使得资源加载速度更快。
同时,可以将不需要发送 Cookie 的请求与主域区分开,可以有效减小请求头大小,使得传输速度更快。

域名收敛

我们知道,在浏览器地址栏内输入一个域名并回车以后,第一步执行的就是DNS解析,将网址转换为IP地址,然后才能开始TCP握手。

DNS解析过程如下:

  1. 查找浏览器DNS缓存,如果没有相应的记录, → 2
  2. 查找操作系统DNS缓存,如果没有, → 3
  3. 查找HOSTS文件,如果没有, → 4
  4. 请求ISP的DNS Server, → 5
  5. 从的根域名服务器开始,依次请求顶级域的权威服务器 、二级域服务器等,获取IP地址

由于移动端存储空间成本、人为干扰等因素,缓存失效的可能性极高,而如果没有缓存,在移动网络等弱网环境下,DNS解析耗时将变得很长(通常要达到1秒以上)。对于静态资源域名,JS等资源的加载缓慢将直接阻塞页面渲染。所以,为了减少 DNS 请求的时间,收敛域名也成为了性能优化的重要方面,同时收敛域名也有利于更好的利用缓存。

HTTP2

在域名收敛之后,为了解决浏览器同域名下的并发数量限制,可以启用HTTP2(由于新协议中的 Header 压缩等原因,速度要快于SPDY)。
在HTTP2中,提出了多路复用(MultiPlexing)的概念,即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面,从而解决了浏览器的并发限制问题。

参考资料

https://github.com/amfe/article/issues/1
http://www.alloyteam.com/2016/07/httphttp2-0spdyhttps-reading-this-is-enough/
http://taobaofed.org/blog/2015/12/16/h5-performance-optimization-and-domain-convergence/?utm_source=tuicool&utm_medium=referral