在九十年代中期,Laurence Peter Deutsch和他在Sun Microsystems的同事设计了一份他们称之为分布式计算的谬论的列表。这些都是开发分布式系统的开发人员容易产生的常见假设列表;错误会影响其软件的可靠性、安全性或弹性。这些谬误如下:
1.网络是可靠的。
2.延迟是零。
3.带宽是无限的。
4.网络是安全的。
5.拓扑结构不会改变。
6.有一个管理员。
7.运输成本是零。
8.网络是同构的。
有趣的是,尽管Deutsch被认为是“分布式计算的谬论”(Fallacies of Distributed Computing),但在一段时间内,许多人都写了完整的谬论列表。我的一个小小英雄比尔·乔(Bill Joy)(前者的发明者,后来是vi)编辑,负责与汤姆·里昂(Tom Lyon)一起制定前四项谬论,他们称之为网络计算的谬论。
仔细地读到上面列出的8个谬论,它们看起来是如此的明显和清晰,以至于你很难相信每个人都会与之相抵触:当然我们知道带宽并不是无限的!问题是,这些谬论是显而易见的,但它们并不存在,没有教给我们任何新的东西;它们的存在让我们想起了基本原理。它们也不打算解释或描述正常情况,而是打算提醒我们最坏的情况。他们并不是说网络总是不可靠的,或者延迟总是很高,或者带宽总是很低;而是说有时候,其中一个或者所有的都不是最优的,我们应该为此做好准备。
然而,一次又一次地,我看到开发人员陷入了同样的老陷阱——对他们的应用程序运行的条件做出假设或过于乐观的预测。开发人员经常告诉我,我们的大多数用户都在使用wifi,或者现在到处都是4G,或者人们只会从办公室里访问这个网站。即使这些在统计上是真实的。但是你的分析证实了你的计划中最好的结果,完全没有做好最坏的准备。
在这篇文章中,我想重点讨论前三种与前端性能相关的谬误,以及它们如何影响我们作为前端开发人员的。不管我们是否意识到这一点,我们都处于分布式计算的业务中:你可能希望您所写的CSS文件从某台计算机(服务器)到另一台计算机(用户的手机)网络(互联网)。
网络是可靠的
网络根本不可靠。当你的火车进入隧道时,你有多少次失去了蜂窝连接?有多少次互联网在你的办公室消失了?有多少次被连接到不稳定的酒店或会议wifi?很多时候,我敢打赌这每周都有很多次这样的事情发生。我们从第一手的经验中知道,网络可能是不可靠的,但是我们总是在假设它会存在并且是正确的。有了这样的心态,如果我们的假设受到挑战,我们将很难实现任何目标——我们很可能完全失败。
谚语说,最好的要求是从来没有做的。虽然这并不总是可行的,但如果我们能够完全避开网络,那么这将会保持良好的状态。我们可以开始通过离线优先方法,积极的不可变的缓存以及服务人员来缓解这种情况。
网络是敌对的;假设它不在你身边。
延迟是零
前端性能的关键限制因素之一,甚至比带宽更重要的是延迟。麻省理工学院的Hari Balakrishnan教授及其同事在2014年进行了一项研究,Balakrishnan总结说:
缓慢的加载时间与网络延迟相比,可用带宽更为强烈。我们认为,减少网络延迟的影响会使网页有最显着的加速,而不是减少传输的字节数。
对于常规的网页浏览来说,高延迟将比低带宽更容易感觉到。长往返时间(RTT)会延迟数据包通过网络传输的速度。蜂窝连接通常比我们在宽带上遇到的延迟要高得多;纤维会更低。地理区域也往往会受到影响。
我们可以通过使用CDN,通过预先连接新的重要来源,通过内联小型关键资源,以及减少呈现页面所需的往返次数来减轻延迟问题。
在性能方面,特别是在移动方面,延迟是真正的杀手。
带宽是无限的
尽管对于一般网页浏览而言,延迟并不重要,但带宽仍然是我们用户体验的一个关键限制因素。当我们开始下载更大的文件时,带宽就成了一个问题:通过8MB连接下载一个50KB的样式表会感觉与在100MB连接上的样子相同,但是下载或者传输大文件,比如软件更新或者视频,在高带宽连接上更容易。
尽管如此,我们仍然需要注意我们通过网络发送的文件的大小:将整个应用程序打包成一个1.2MB的JavaScript包中,这样的做法不太赞成。我们可以通过提供适当大小的有效载荷,优化我们的图像,缩小和压缩我们的文本资产,开始减轻有限带宽的影响。假设要用户可以下载大文件是不安全或不明智的。
规划最糟糕的事情
Expect the best, plan for the worst, and prepare to be surprised.(期待最好的,最坏的计划,并准备感到惊讶。) Denis Waitley
这里的关键问题不是我们应该假设所有的事情都是坏的;如果我们不考虑或准备最坏的情况,那么我们就完全没有准备好去处理这些情况。如果你构建和构造应用程序,使它们能够在逆境中生存,那么它们将在有利的环境中茁壮成长。
领取专属 10元无门槛券
私享最新 技术干货