首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

应用于前端性能的分布式计算的谬论

在九十年代中期,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

这里的关键问题不是我们应该假设所有的事情都是坏的;如果我们不考虑或准备最坏的情况,那么我们就完全没有准备好去处理这些情况。如果你构建和构造应用程序,使它们能够在逆境中生存,那么它们将在有利的环境中茁壮成长。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180121A0OMIZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券