虽然他们生活在两个光纤无所不在、4/5G 几乎全全面覆盖的黄金时代,但中文网站读取较慢还是恒常,即使他们关上两个以文档为服务中心的新闻中文网站,都可能将须要最少 30 秒才能已经开始写作。即便在内容收缩黄金时代,一张相片就能轻而易举超过 1MB 大小,很多中文网站为了显示两段文档,还会原则上读取最少 10MB 的 JS 和自订手写体。
对此,对强化和极简主义者醉心于的现职 Web 合作开发 Nathaniel 告诉他们,你如果让你的页面尽全力控制在 14KB 以上,而且即使对以富媒体为服务中心的中文网站,那条 14KB 的准则可能将仍然值得称赞遵从。如果 14KB 足以用于最终产业布局,则须要优先选择考虑“井字”二进制,可以用推送至访客的前 14KB 统计数据来图形一些管用的东西,减少使用者还没已经开始写作就外流掉的机会。
页面越短,读取速率就越快——这一点儿都不怪异。
但更让人感到吃惊的是,14KB 页面的读取速率比 15KB 要好得多——可能将快 612 微秒——而 15KB 和 16KB 页面之间的读取速率差别非常有限。
TCP 是什么
传输控制协议(Transmission Control Protocol,TCP)是一种采用 IP 协议可信地推送报文的方式——有时被称为 TCP/IP。
当应用程序向你的中文网站(或影像或JSP)发出允诺时,它会采用 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,就可以为访客节省大量的时间——他们和中文网站服务器之间的往返时间。
两个统计数据往返能有多糟糕?但人们非常没耐心——两个统计数据往返可能将会出奇地长,具体多长取决于延迟……延迟是指报文从源传输到出发地所花费的时间。如果带宽是每秒钟可以通过管道的水的数量,那么延迟就是一滴水进入管道后从另一端流出所花费的时间。
下面是两个关于延迟有多糟糕的例子。
卫星互联网
卫星互联网是由环绕地球轨道的卫星提供的,在人烟稀少的地区、石油钻井平台、游轮以及飞机上,人们可以采用这种互联网。
为了说明这种糟糕的延迟,他们想象一群在石油钻井平台工作的兄弟把骰子忘在了家里,他们须要通过 missingdice.com(少于 14KB)来玩《龙与地下城》游戏。
首先,他们中的两个用手机发出两个页面允诺……
手机将允诺推送至钻井平台的 WiFi 路由器,路由器将统计数据推送至平台上的卫星天线,他们假设这可能将须要 1 微秒时间。
然后,卫星天线将统计数据推送至地球轨道上方的卫星。
通常,这是通过在地球表面上方 35786 公里处运行的轨道卫星实现的。光速为 299792458 米/秒,所以信息从地球推送至卫星须要 120 微秒。然后,卫星将信息传回地面接收站,这又须要 120 微秒。
然后,地面站必须将允诺推送至位于地球任意边线的服务器(当光通过光纤电缆传输时,速率会降至每秒 200000000 米)。如果地面站和服务器之间的距离等于纽约到伦敦之间的距离,那么大约须要 28 微秒,如果地面站和服务器之间的距离等于纽约到悉尼之间的距离,则须要 80 微秒——所以他们姑且定两个 60 微秒的数字(这个数字便于计算)。
然后,服务器须要处理允诺,这可能将须要 10 微秒,然后服务器再次将它推送出去。
回到地面站,进入太空,回到卫星天线,然后回到无线路由器,再到手机上。
手机 -> WiFi 路由器 ->卫星天线 ->卫星 -> 地面站 -> 服务器 -> 地面站 -> 卫星 -> 卫星天线 -> WiFi 路由器 -> 手机
如果他们算一下,就是 10 + ( 1 + 120 + 120 + 60 ) x 2 = 612 微秒。
另外,HTTPS 在完成第两个往返之前需要额外的两次往返——这使延迟达到了 1836 微秒!
对生活在陆地上的人,延迟又是怎样的
卫星互联网似乎是两个极端的例子——我选择它作为例子是因为它能够充分说明了互联网延迟这个问题——但对生活在陆地上的人来说,延迟可能将比这更糟糕,原因有很多。
2G 互联网的延迟通常在 300 微秒到 1000 微秒之间;3G 互联网的延迟可以在 100 微秒到 500 微秒之间;嘈杂的移动互联网——比如在两个异常拥挤的地方,比如音乐节;处理大流量的服务器;其他一些不好的东西。了解了 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/