来自加拿大(GTmetrix)的第一次页面加载,服务器托管在法兰克福(Frankfurt)
网络性能网络延迟是页面加载时间最重要的因素,它也是最难优化的。但在我们进行优化之前,让我们看一下对初始的浏览器请求的划分:
当我们在浏览器中输入 https://www.thinks.com/ 并按下回车键时,浏览器开始使用 DNS 查找来识别与域相关联的 IP 地址,这种查找必须对每个单独的域进行。
使用接收到的 IP 地址,浏览器初始化与服务器的 TCP 连接。TCP 握手需要 2 次往返(1 次是 TCP 快速打开)。使用安全的 SSL 连接,TLS 握手需要额外的 2 次往返(1 次是 或 Session Resumption)。
在初始连接之后,浏览器发送实际请求并等待数据进入。第一个字节到达的时间主要取决于客户端和服务器之间的距离,包括服务器渲染页面所需的时间(包括会话查找、数据库查询和模板渲染等)。
最后一步是在可能的多次往返中下载资源(在这种情况下指的是 HTML )。新连接尤其通常需要很多往返,因为初始拥塞窗口很小。这意味着 TCP 不是从一开始就使用全带宽,而是随着时间的推移而增加带宽(参见 TCP拥塞控制。下载速度受到慢启动算法的支配,该算法在每次往返的拥塞窗口中将报文段数量加倍,直到丢包发生。在移动网络和 Wifi 网络上丢失数据包因此具有很大的性能影响。
另一件要记住的事是:使用 HTTP/1.1,你只能得到 6 个并行连接(如果浏览器仍然遵循原始标准,则连接数为 2)。因此,你最多只能请求 6 个资源并行。
为了对网络性能对于页面速度的重要性有一个直观的认识,你可以查看 httparchive ,上面有很多统计数据。例如,网站平均在 100 多个请求中加载大约 2.5 MB的数据。
所以网站发出了很多小的请求来加载很多资源,但网络带宽一直在增加。物理网络的演进将拯救我们,对吧?嗯,其实并不是……
来自 High Performance Browser Networking,作者为 Ilya Grigorik
事实证明,将带宽增加到 5 Mbps 以上并不真的影响页面加载时间。但减少单个请求的延迟会降低网页加载时间。这意味着带宽加倍带来的是相同的加载时间,而减少一半的延迟将给你一半的加载时间。
因此,如果延迟是网络性能的决定因素,我们可以在这上面做些什么呢?
持久连接是必须有的。没有什么比当你的服务器在每个请求后关闭连接,并且浏览器必须一次又一次地执行握手操作和 TCP 慢启动更糟糕的事情了。
尽可能地避免重定向,因为它们会大大减慢你的初始网页加载速度。永远链接完整的网址(例如使用 而不是 thinks.com)。