我正在优化网站的页面加载时间。一种方法是将CSS的多个HTTP请求合并为一个合并的HTTP请求。但是其中一位审阅者提出了一个有趣的问题:将多个CSS文件的下载并发会不会减少页面加载时间?
我从来没有考虑过这个选项,因为我在互联网上读到的唯一一件事就是减少(阻止)HTTP请求的数量是加快网页速度的关键(尽管Google Pagespeed Insights似乎并未明确指出这一点1)。
我看到了为什么并行化不会提高性能或仅影响很小的几个原因(被使用更少的HTTP请求所带来的好处所抵消):
- 设置新连接非常昂贵。虽然可以并行设置多个连接,但浏览器最多使用约4-6个连接(取决于浏览器),因此并行下载CSS会阻止下载其他资源,例如JavaScript和图像。
- 设置HTTPS连接需要一些额外的数据。我读过这很容易就是几KB的数据。这是一些额外的数据,必须通过网络发送,而不是我们实际要发送的CSS。
- 由于使用了TCP慢启动算法,因此通过连接发送的数据越多,连接速度就越快。因此,寿命更长的连接实际上将比新连接更快地发送数据。例如,请参阅SPDY协议,该协议使用单个连接来缩短页面加载时间。
- TCP是一种抽象:通常只有一个基础连接。因此,当使用多个请求时,通过有线发送的数据可能不一定会完全受益于多个连接以提高速度。
- Internet连接本质上是不可靠的,尤其是在移动设备上。一个请求的完成速度可能比另一个请求快得多。对CSS使用多个请求意味着渲染网页直到最后一个请求完成才被阻止,这可能比平均连接时间晚很多。
因此,并行处理CSS文件的HTTP请求是否有任何好处?
注意/更新:所有CSS文件都被渲染阻止。尚未移出关键路径的CSS文件。