3

为什么你开发的网页不应该大于 14KB?

 1 year ago
source link: https://www.fly63.com/article/detial/12140
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

更新日期: 2022-09-18阅读: 10标签: 网页分享

扫一扫分享

虽然我们生活在一个宽带无处不在、4/5G 几乎全覆盖的时代,但网站加载缓慢还是常态,就算我们打开一个以文本为中心的新闻网站,都可能需要至少 30 秒才能开始阅读。毕竟在内容膨胀时代,一张照片就能轻易超过 1MB 大小,许多网站为了显示几段文本,还会单独加载至少 10MB 的 JS 和自定义字体。
 对此,对优化和极简主义充满热情的资深 Web 开发 Nathaniel 告诉我们,你应该让你的网页尽力控制在 14KB 以内,而且即使对于以富媒体为中心的网站,这条 14KB 的规则可能仍然值得遵循。如果 14KB 不足以用于最终布局,则需要优先考虑“首屏”字节,可以用发送给访问者的前 14KB 数据来渲染一些有用的东西,减少用户还没有开始阅读就流失掉的机会。

网页越小,加载速度就越快——这一点都不奇怪。

但令人感到惊讶的是,14KB 网页的加载速度比 15KB 要快得多——可能快 612 毫秒——而 15KB 和 16KB 网页之间的加载速度差异微乎其微。

这是 TCP 慢启动算法导致的。本文将介绍这个算法、它的原理以及为什么你应该关注它。但首先我们需要快速过一遍一些基础知识。

1、TCP 是什么

传输控制协议(Transmission Control Protocol,TCP)是一种使用 IP 协议可靠地发送数据包的方法——有时被称为 TCP/IP。

浏览器向你的网站(或图像或样式表)发出请求时,它会使用 HTTP 请求。HTTP 建立在 TCP 之上,一个 HTTP 请求通常由许多 TCP 数据包组成。IP 只是一个将数据包从互联网上的一个位置发送到另一个位置的系统。IP 没有检查数据包是否成功到达目的地的方法。

对于网站来说,确保所有的数据到达请求端是非常关键的,否则我们可能会因为丢失数据包无法获得完整的网页。但在网络的其他应用场景中,这一点并不那么重要——比如流媒体直播视频。

TCP 是 IP 的扩展,浏览器和网站服务器通过它告诉对方哪些数据包已经成功到达。

服务器发送一些数据包,然后等待浏览器已经收到数据包的响应(这叫确认或 ACK),然后它继续发送更多的数据包——或者如果它没有收到 ACK,将再次发送相同的数据包。

2、什么是 TCP 慢启动

TCP 慢启动是一种算法,服务器用它来确定一次可以发送多少数据包。

当浏览器第一次连接到服务器时,服务器无法知道它们之间的带宽是多少。带宽是指在单位时间内网络可以传输的数据量。通常以比特 / 秒(b/s)为单位。我们可以用管道来作类比——把带宽想象成每秒从管道流出多少水。

服务器不知道网络连接可以处理多少数据——所以它先发送少量且安全的数据——通常是 10 个 TCP 数据包。如果这些数据包成功地到达网站访问者,他们的计算机返回确认(ACK),表示数据包已经被收到了。然后,服务器发送更多的数据包,但这一次它将数据包的数量增加了一倍。

这个过程会不断重复,直到数据包丢失,服务器没有收到 ACK。(此时,服务器会继续发送数据包,但速度较慢)。

这就是 TCP 慢启动的要点——在现实当中,虽然算法各不相同,但这是它的基本原理。

3、那么 14KB 这个数字是怎么来的

大多数 Web 服务器的 TCP 慢启动算法都是从发送 10 个 TCP 数据包开始的。

TCP 数据包最大长度为 1500 字节。这个最大值不是由 TCP 规范设置的,它来自于以太网标准。

每个 TCP 数据包的标头占了 40 个字节,其中 16 个字节用于 IP,另外 24 个字节用于 TCP。

这样每个 TCP 数据包还剩下 1460 个字节。10 x 1460 = 14600 字节,或大约 14KB!

因此,如果你能把网站的网页——或网页的关键部分——压缩到 14KB,就可以为访问者节省大量的时间——他们和网站服务器之间的往返时间。

一个数据往返能有多糟糕?但人们非常没有耐心——一个数据往返可能会出奇地长,具体多长取决于延迟……延迟是指数据包从源传输到目的地所花费的时间。如果带宽是每秒钟可以通过管道的水的数量,那么延迟就是一滴水进入管道后从另一端流出所花费的时间。

下面是一个关于延迟有多糟糕的例子。

卫星网络是由环绕地球轨道的卫星提供的,在人烟稀少的地区、石油钻井平台、游轮以及飞机上,人们可以使用这种网络。

为了说明这种糟糕的延迟,我们想象一群在石油钻井平台工作的兄弟把骰子忘在了家里,他们需要通过 missingdice.com(少于 14KB)来玩《龙与地下城》游戏。

首先,他们中的一个用手机发出一个网页请求……

手机将请求发送到钻井平台的 WiFi 路由器,路由器将数据发送给平台上的卫星天线,我们假设这可能需要 1 毫秒时间。

然后,卫星天线将数据发送到地球轨道上方的卫星。

通常,这是通过在地球表面上方 35786 公里处运行的轨道卫星实现的。光速为 299792458 米 / 秒,所以信息从地球发送到卫星需要 120 毫秒。然后,卫星将信息传回地面接收站,这又需要 120 毫秒。

然后,地面站必须将请求发送到位于地球任意位置的服务器(当光通过光纤电缆传输时,速度会降至每秒 200000000 米)。如果地面站和服务器之间的距离等于纽约到伦敦之间的距离,那么大约需要 28 毫秒,如果地面站和服务器之间的距离等于纽约到悉尼之间的距离,则需要 80 毫秒——所以我们姑且定一个 60 毫秒的数字(这个数字便于计算)。

然后,服务器需要处理请求,这可能需要 10 毫秒,然后服务器再次将它发送出去。

回到地面站,进入太空,回到卫星天线,然后回到无线路由器,再到手机上。

手机 -> WiFi 路由器 ->卫星天线 ->卫星 -> 地面站 -> 服务器 -> 地面站 -> 卫星 -> 卫星天线 -> WiFi 路由器 -> 手机
如果我们算一下,就是 10 + ( 1 + 120 + 120 + 60 ) x 2 = 612 毫秒。

这是每次往返额外的 612 毫秒——也许这看起来不是很长时间,但你的网站可能只是为了获取第一个资源就需要许多个往返。

另外,HTTPS 在完成第一个往返之前需要额外的两次往返——这使延迟达到了 1836 毫秒!

对于生活在陆地上的人,延迟又是怎样的

卫星网络似乎是一个极端的例子——我选择它作为例子是因为它能够充分说明了网络延迟这个问题——但对于生活在陆地上的人来说,延迟可能比这更糟糕,原因有很多。

  • 2G 网络的延迟通常在 300 毫秒到 1000 毫秒之间;

  • 3G 网络的延迟可以在 100 毫秒到 500 毫秒之间;

  • 嘈杂的移动网络——比如在一个异常拥挤的地方,比如音乐节;

  • 处理大流量的服务器;

  • 其他一些不好的东西。

不稳定的网络连接也会导致数据包丢失——导致需要另一个往返来获取丢失的数据包。

4、了解了 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 握手来建立一个更大的窗口;

  • 服务器可以缓存路由可管理的数据包数量,并在下一次连接时发送更多的数据包;

  • 还有其他需要注意的地方——这里有一篇文章更深入地探讨关于为什么 14KB 法则并不总是这么回事。

(https://www.tunetheweb.com/blog/critical-resources-and-the-first-14kb/)。

HTTP/2 和 14KB 法则

有一种观点认为,在使用 HTTP/2 时,14KB 法则不再适用。我已经读了所有我能读到的关于这个问题的东西,但我还没有看到任何证据表明使用 HTTP/2 的服务器已经停止使用 TCP 慢启动(从 10 个数据包开始)。

HTTP/3 和 QUIC

与 HTTP/2 类似,有一种观点认为 HTTP/3 和 QUIC 将废除 14KB 法则——事实并非如此。实际上,QUIC 仍然建议使用 14KB 法则。

原文链接:https://endtimes.dev/why-your-website-should-be-under-14kb-in-size/
作者:Nathaniel,译者:InfoQ - 明知山

"margin:>


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK