在http/1.1的情况下,一个网页有多个资源,每个文件都会创建一个到服务器端的连接来检索数据、js、css等,我认为这种工作模式类似于多进程或多线程并行工作。
但是在http/2的情况下,每个域在一个web页面中只有一个连接,即使它可以处理来自客户端浏览器的多个请求,也可能类似于单线程。
我不知道为什么http/2比http/1.1的性能更好?
最佳答案
HTTP/2复用比HTTP/1.1更有效的原因是Web页面与打开TCP连接的成本几乎没有关系。
在http/1.1中,浏览器通常每个域最多打开6个连接。
在这些连接打开之后,它们会一直保持打开状态并反复使用,直到它们空闲。
然而,即使在这些连接被打开之后,http/2也比http/1.1快,所以很明显,在这里打开tcp连接的成本并不高。
今天,一个典型的网页可能有多达100个资源可从源服务器下载。
让我们保持简单,假设客户机和服务器之间有一个200毫秒的往返行程。为了在http/1.1中下载页面,浏览器必须下载主html页面(1次往返),然后解析html页面并安排下载100个资源-但它只有6个连接。
因此,浏览器发送前6个请求,然后等待它们返回(1个往返);然后再发送6个请求,然后等待它们返回(1个往返);等等。
在这个简单的模型中,要下载100个资源,浏览器需要1+17次往返,每次200毫秒意味着3.6秒。
在http/2中,浏览器对html页面发出请求,但是由于http/2是多路复用的,因此它可以自由地对100个资源发出所有请求,而无需等待。
在这个简单的模型中,要下载100个资源,浏览器需要1+1次往返(即400毫秒)以使下载时间加快10倍。
现在,事情并不像上面描述的那么简单,但由于复用,增益仍然有相当大的影响。
你可以通过在线查看例子来了解这种影响(here和here),你可以在这个和其他HTTP/2好处上看“AA>”(你可以观看演示复用效果my HTTP/2 presentation的演示)。
关于http - 为什么HTTP/2多路传输比http/1.1更好?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43749593/