影响HTTP性能的指标
  KRsXEGSB49bk 2023年11月24日 43 0

1. 影响HTTP性能的指标:

①. 延迟:
    a. RTT时间端点之间的往返.

②. 带宽:

③. DNS查询:

④. 建立连接时间:
    a. TCP三次握手

⑤. TLS协商时间:
    a. HTTPS连接请求下

⑥. 首字节时间(TTFB,从请求到接收到响应第一字节所耗费的时间),

⑦. 内容下载时间(TTLB),

⑧. 文档加载完成时间,

⑨. 页面复杂度

⑩. 更多的域名,css一个,图片一个,js一个等等。

⑪. 更多的TCP socket ,HTTP/1.1下浏览器客户端会对一个域名开启最多6个socket连接。

2.1、队头阻塞 在HTTP/1.1下,如果使用一个连接去请求一个域名下有很多资源,则必须经过发起请求-等等响应-再发起请求这样的过程。在请求应答的过程中,如果出现任何问题包括服务端响应、网络等问题,那么剩下的所有处理都会被阻塞在上次请求应答之后,这就是 “队头阻塞” 问题。即使浏览器客户端会对单个域名开启最多6个socket连接(这个也要跟具体的浏览器来区分比如Firefox是6个,Chrome则是24个)来分发请求,但是每个连接下仍然会受到 “队头阻塞” 的影响。

因为在http 1.1时代,由于需要建立多个TCP连接,服务器需要更多的线程来处理请求,同样地,浏览器也需要,所以浏览器会限制同一个域的同时请求数,Chrome是限制6个,总连接数是17个,其它浏览器的个数有所浮动,但差不多,读者可以这个网站测试自己所用的浏览器的限制情况。可以实际对比一下,http 1.1会让资源排队加载

(1). HTTP1的传输方式:

①. HTTP/1.1是以文本格式传输,解析还原都是以文本分割.

②. 比如下面这段内容,读取然后直到遇到分隔符,这里是<crlf>。这样往往速度比较慢,需要不断读入字节。最重要的一点是所请求的内容需要按照顺序,而且服务端也是按照接受的顺序依次解析响应输出给客户端。这种方式就会带来我们在2.1里面介绍的 队头阻塞 问题。
GET / HTTP/1.1 <crlf> 
Host: www.example.com <crlf> 
Connection: keep-alive <crlf> 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9... <crlf> 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4)... <crlf> 
Accept-Encoding: gzip, deflate, sdch <crlf> 
Accept-Language: en-US,en;q=0.8 <crlf> 
Cookie: pfy_cbc_lb=p-browse-w; customerZipCode=99912|N; ltc=%20;...<crlf> <crlf>!

在HTTP/1.1下浏览器客户端受限于并发请求数(同一个域名并发数有限制)

2.2、拥塞窗口 我们已知HTTP协议之下TCP的支撑,那么TCP成功的关键不是因为它高效而是最可靠的协议之一,这中间有个 “拥塞窗口” 的概念:在接收方确认数据包之前,发送方可以发出的TCP包的数量。比如 拥塞窗口 被指定为1 那么发送方发出1个数据包之后只有接收方确认了这个包,才能发送下一个。那么网络应该怎么才能知道 这个窗口的大小被指定多少合适呢,TCP还有一个概念叫 “慢启动”,形象化的比喻就好比在一间黑暗的屋子,当我们碰到桌子或者凳子的时候就会调整换个方向,慢启动也是这样的原理来调整拥塞窗口的大下。在这样的机制下,比如要发送请求一个大小为2M的HTML页面,在数据包设置为最大值1460字节,拥塞窗口为4,也就是一次发送5840字节的情况下,就需要9次往返才能传输整个页面。可以说HTTP/1.1是低效的利用了TCP。

2.3、臃肿的消息首部 HTTP消息首部被用来描述资源信息,或者是客户端和服务器的行为,自定义专有的首部可以加上 “X-” 前缀。另外cookie也属于消息首部的范畴。在HTTP/1.1中虽然提供gzip压缩机制,但是对于消息首部却无法压缩,虽然这些内容比正常请求的内容资源小的多,但也是不能被忽略的,如果计算上cookie里面的内容,几千个字节是很正常的。尤其是在低带宽或者高拥堵的链路下,就会发生类似 “体育馆效应” 的问题,成千上万人同一时间出现在同一地点,迅速耗尽无线蜂窝网络带宽。这个时候如果能压缩请求首部将其变得更小,那么就能缓解带宽压力,降低系统的总负载。

基于以上我们已知的影响HTTP性能的指标以及我们列出的HTTP/1.1协议下的特点,我们平时都是怎么优化这些网络请求响应的呢。主要有以下几种方法。

1、DNS查询优化

2、优化TCP连接

3、避免重定向

4、客户端缓存

5、压缩和代码极简化

6、避免阻塞 CSS/JS

7、图片优化

在HTTP/1.1这么长的时间里,以上列举出的优化方法大家都已经耳熟能详了。这里不再过多叙述,如果有不了解的可以查阅相关资料,因为它不是这篇文字的重点。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月24日 0

暂无评论

推荐阅读
  38gcbVXUBcLA   2023年11月26日   18   0   0 服务器htmlHTTP
  4Txe79BjyroE   2023年12月08日   11   0   0 TCP
  38gcbVXUBcLA   2023年11月24日   17   0   0 服务器客户端HTTP
  KRsXEGSB49bk   2023年11月24日   44   0   0 TCPHTTP首部
  pfb3gDAOHucg   2023年12月09日   19   0   0 TCP网络层协议UDP
  eHipUjOuzYYH   2023年12月06日   13   0   0 nginxHTTP
  mjtHZIki74si   2023年12月06日   14   0   0 TCP重传
  38gcbVXUBcLA   2023年11月25日   16   0   0 服务器客户端HTTP