①14KB 网页的加载速度比 15KB 要快得多 —— 可能快 612 毫秒 —— 而 15KB 和 16KB 网页之间的加载速度差异微乎其微,这是 TCP 慢启动算法导致的;
②TCP 是什么:
传输控制协议(Transmission Control Protocol,TCP)是一种使用 IP 协议可靠地发送数据包的方法 —— 有时被称为 TCP/IP。当浏览器向你的网站(或图像或样式表)发出请求时,它会使用 HTTP 请求。HTTP 建立在 TCP 之上,一个 HTTP 请求通常由许多 TCP 数据包组成。IP 只是一个将数据包从互联网上的一个位置发送到另一个位置的系统。IP 没有检查数据包是否成功到达目的地的方法。对于网站来说,确保所有的数据到达请求端是非常关键的,否则我们可能会因为丢失数据包无法获得完整的网页。但在网络的其他应用场景中,这一点并不那么重要 —— 比如流媒体直播视频。TCP 是 IP 的扩展,浏览器和网站服务器通过它告诉对方哪些数据包已经成功到达。服务器发送一些数据包,然后等待浏览器已经收到数据包的响应(这叫确认或 ACK),然后它继续发送更多的数据包 —— 或者如果它没有收到 ACK,将再次发送相同的数据包;
③什么是 TCP 慢启动:
TCP 慢启动是一种算法,服务器用它来确定一次可以发送多少数据包。当浏览器第一次连接到服务器时,服务器无法知道它们之间的带宽是多少。带宽是指在单位时间内网络可以传输的数据量。通常以比特 / 秒(b/s)为单位。我们可以用管道来作类比 —— 把带宽想象成每秒从管道流出多少水。服务器不知道网络连接可以处理多少数据 —— 所以它先发送少量且安全的数据 —— 通常是 10 个 TCP 数据包。如果这些数据包成功地到达网站访问者,他们的计算机返回确认(ACK),表示数据包已经被收到了。然后,服务器发送更多的数据包,但这一次它将数据包的数量增加了一倍。这个过程会不断重复,直到数据包丢失,服务器没有收到 ACK。(此时,服务器会继续发送数据包,但速度较慢)。这就是 TCP 慢启动的要点 —— 在现实当中,虽然算法各不相同,但这是它的基本原理;
④那么 14KB 这个数字是怎么来的:
大多数 Web 服务器的 TCP 慢启动算法都是从发送 10 个 TCP 数据包开始的。TCP 数据包最大长度为 1500 字节。这个最大值不是由 TCP 规范设置的,它来自于以太网标准。每个 TCP 数据包的标头占了 40 个字节,其中 16 个字节用于 IP,另外 24 个字节用于 TCP。这样每个 TCP 数据包还剩下 1460 个字节。10 x 1460 = 14600 字节,或大约 14KB!因此,如果你能把网站的网页 —— 或网页的关键部分 —— 压缩到 14KB,就可以为访问者节省大量的时间 —— 他们和网站服务器之间的往返时间;
⑤了解了 14KB 法则,接下来可以做些什么:
这 14KB 可以是压缩数据 —— 所以实际上可以对应大约 50KB 的未压缩数据 —— 这已经非常慷慨了。要知道,阿波罗 11 的制导计算机只有 72KB 内存。去掉自动播放的视频、弹出窗口、Cookie、Cookie 横幅、社交网络按钮、跟踪脚本、JavaScript 和 CSS 框架,以及所有其他人们不喜欢的垃圾 —— 你可能就能实现 14KB 法则。假设你已经尽力将所有内容控制在 14KB 以内,但仍然做不到 —— 但 14KB 法则仍然很有用。你可以用发送给访问者的前 14KB 数据来渲染一些有用的东西 —— 例如一些关键的 CSS、JS 和解释如何使用你的应用程序的前几段文本。需要注意的是,14KB 法则包含了 HTTP 标头 —— 这些是未压缩的(即使是 HTTP/2 的第一个响应),也包含图片,所以你应该只加载在页面上方的内容,并保持它们最小,或者使用占位符,让访问者知道他们在等待一些更好的内容;
⑥关于这个法则的一些注意事项:
14KB 法则更像是一种经验之谈,而不是计算的基本法则。
一、一些服务器已经将 TCP 慢启动初始窗口从 10 个数据包增加到 30 个;
二、有时服务器知道它可以从更大数量的数据包开始传输,因为它使用 TLS 握手来建立一个更大的窗口;
三、服务器可以缓存路由可管理的数据包数量,并在下一次连接时发送更多的数据包;
⑦HTTP/2 和 14KB 法则:有一种观点认为,在使用 HTTP/2 时,14KB 法则不再适用。我已经读了所有我能读到的关于这个问题的东西,但我还没有看到任何证据表明使用 HTTP/2 的服务器已经停止使用 TCP 慢启动(从 10 个数据包开始);
⑧HTTP/3 和 QUIC:与 HTTP/2 类似,有一种观点认为 HTTP/3 和 QUIC 将废除 14KB 法则 —— 事实并非如此。实际上,QUIC 仍然建议使用 14KB 法则;
(参考:mp.weixin.qq.com/s/0i2oVnlR_…