每隔一段时间,创新的成果就会以改进网络基础层面的形式出现。 2015 年,HTTP/2 成为发布的标准,旨在更新一个老化的协议。 这既是必要的,也是早就该做的事,因为 HTTP/1 使网络性能成为一种奇怪的学科,以奇怪的解决方法的形式来解决它的局限性。 尽管 HTTP/2 的普及并非绝对——而且 仍然存在一些需要解决的问题——我认为可以说,网络因此变得更好。
不幸的是,HTTP/2 的推出导致 过去四年移动设备上传输的字节数中位数增加了 102%。 如果我们看一下同一数据集的第 90 个百分位数——因为它实际上是 我们需要优化的性能长尾——我们发现增加了 _239%_。 从 2016 年 (PDF 警告) 到 2019 年,美国移动下载速度平均提高了 73%。 在同一时期,巴西和印度的移动下载速度平均分别提高了 75% 和 28%。
虽然页面重量本身并不一定能说明用户体验的全部,但至少,它是一个松散相关的现象,它威胁着 _集体_ 用户体验。 HTTPArchive 通过从 Chrome 用户体验导出 (CrUX) 获取的数据讲述的故事 可以用多种方式进行解释,但有一个事实是坚定不移的:过去几年从 CrUX 中收集的大多数指标表明,尽管浏览器、HTTP 协议和网络本身都得到了改进,但几乎没有改善,甚至没有改善。
鉴于这些趋势,目前只能说这些改进的影响是帮助遏制了我们过度的趋势,但几乎没有 _减少_ 它们。 尽管网络基础设施和我们访问网络的网络都得到了显著改进,但我们仍在以一种暗示我们对无休止的 杰文斯悖论 感到满意的方式为其构建。 我们在其中辛勤劳作。
如果我们要在为每个人打造一个更快的网络方面取得进展,我们必须认识到实现这一目标的一些障碍
- 无休止地渴望将网络的每一寸土地都货币化,以及为这种狂热努力所要求的研究提供动力的 第三方供应商 大军。
- 工作场所文化偏爱不受约束的以功能为导向的开发。 这种做法增加了——但很少减少——我们塞给用户的线缆。
- 开发人员的便利性让开发人员的工作更容易,但也可能给客户端带来越来越高的成本。
与直觉相反,拥有体现了上述某些或所有特征的成熟代码库的所有者继续走上他们一直以来走过的同样不可持续的盈利道路。 他们这样做是冒着自身的风险,而不是承认 反复证明的事实,即以性能为先的开发实践将为他们的利润率 _和_ 用户体验做出同样多——甚至更多——的贡献。
正是基于这种理解,我开始接受我们当前解决糟糕性能的方法主要包括源于我们业务、产品管理和工程实践的弊端的工程技术。 我们擅长使用止血带,但不擅长缝合深层伤口。
越来越明显的是,网络性能不仅仅是一个工程问题,而是一个 _人_ 的问题。 这部分是不受欢迎的评估,因为技术解决方案相对来说是不可争辩的。 内容压缩有效。 缩小有效。 树摇有效。 代码拆分_有效_。 它们是对看似完全是技术问题的不可否认的有效解决方案。
另一方面,网络性能与人之间的交叉是混乱且不方便的。 与 HTTP/2 这样明显有益的技术解决方案不同,我们如何确定成功的性能文化是什么样的? 我们如何确定成功的方法才能实现目标? 我不知道这究竟是什么样子,但我相信一个好的模板是以下文化和工程原则的结合
- 一个组织如果不能获得_领导者的支持_,就无法成功地优先考虑性能。 缺少这个至关重要的因素,组织就很难创造一种文化,在这种文化中,性能是其产品的首要特征。
- 即使有领导层的支持,如果缺少衡量性能的遥测数据,也无法有效地优先考虑性能。 没有衡量,就无法解释产品开发如何影响性能。 如果你没有数字,没有人会关心性能,直到它成为明显的危机。
- 当你得到领导层的支持,将性能作为优先事项_并且_ 有遥测数据来衡量它时,你_仍然_无法实现目标,除非你的整个组织都理解网络性能。 这时你将开发和推出组织可以接受的培训、文档、最佳实践和标准。 从某种意义上说,这是组织已经投入大量时间研究的领域,但具有挑战性的工作是建立反馈循环,以评估他们对这些知识的理解程度以及应用这些知识的程度。
- 当所有其他要素最终到位时,你就可以开始在组织中建立围绕性能的责任制。 责任制不是当你的遥测数据告诉你性能随着时间的推移而下降时进行报复,而是在部署过程中设置保护栏,以便在你超过阈值时提醒你。
现在来了关键点:即使所有这些东西都在你的工作场所融合在一起,也不能保证良好的结果。 除非有一些法规迫使我们解决我们负责的性能不佳的网站——类似于 ADA 在可访问性方面提醒我们——我们将会不断地宣传和施加压力,以确保性能_仍然_ 是优先事项。 就像我们在网络上进行的许多工作一样,在不断发展的代码库中维护良好的用户体验的工作永远不会结束。 我希望 2020 年是我们将有意义地认识到性能与人有关,并相应地调整的一年。
随着 HTTP/3 和 5G 等技术创新出现,我们必须注意不要固步自封,仅仅 _假设_ 它们最终会治好我们的疾病。 如果我们这样做,当_那些_ 技术的继任者出现时,我们肯定会再次进行这种讨论。 单凭创新无法让网络保持快速,因为让网络保持快速——并_保持_ 这种速度——是我们只有通过共同努力才能完成的艰巨工作。