性能优化是把双刃剑,有好的一面也有坏的一面。好的一面就是能提升网站性能,坏的一面就是配置麻烦,或者要遵守的规则太多。并且某些性能优化规则并不适用所有场景,需要谨慎使用,请读者带着批判性的眼光来阅读本文。
1.减少HTTP请求一个完整的HTTP请求需要经历DNS查找,TCP握手,浏览器发出HTTP请求,服务器接收请求,服务器处理请求并发回响应,浏览器接收响应等过程。接下来看一个具体的例子帮助理解HTTP:
这是一个HTTP请求,请求的文件大小为28.4KB。
名词解释:
Queueing:在请求队列中的时间。Stalled:从TCP连接建立完成,到真正可以传输数据之间的时间差,此时间包括代理协商时间。Proxynegotiation:与代理服务器连接进行协商所花费的时间。DNSLookup:执行DNS查找所花费的时间,页面上的每个不同的域都需要进行DNS查找。InitialConnection/Connecting:建立连接所花费的时间,包括TCP握手/重试和协商SSL。SSL:完成SSL握手所花费的时间。Requestsent:发出网络请求所花费的时间,通常为一毫秒的时间。Waiting(TFFB):TFFB是发出页面请求到接收到应答数据第一个字节的时间。ContentDownload:接收响应数据所花费的时间。从这个例子可以看出,真正下载数据的时间占比为13.05/.16=6.39%,文件越小,这个比例越小,文件越大,比例就越高。这就是为什么要建议将多个小文件合并为一个大文件,从而减少HTTP请求次数的原因。
2.使用HTTP2HTTP2相比HTTP1.1有如下几个优点:
解析速度快服务器解析HTTP1.1的请求时,必须不断地读入字节,直到遇到分隔符CRLF为止。而解析HTTP2的请求就不用这么麻烦,因为HTTP2是基于帧的协议,每个帧都有表示帧长度的字段。
多路复用HTTP1.1如果要同时发起多个请求,就得建立多个TCP连接,因为一个TCP连接同时只能处理一个HTTP1.1的请求。
在HTTP2上,多个请求可以共用一个TCP连接,这称为多路复用。同一个请求和响应用一个流来表示,并有唯一的流ID来标识。多个请求和响应在TCP连接中可以乱序发送,到达目的地后再通过流ID重新组建。
首部压缩HTTP2提供了首部压缩功能。
例如有如下两个请求:
:authority:unpkg.zhimg.