它不是遗留代码,而是PHP

2020-12-21 15:11:19

去年,Vimeo开发人员以多种语言编写了后端代码-PHP,Go,Ruby,Python,NodeJS,Java,C,C ++和一些Rust。

在2004年,我们仅从一个开始:PHP。对于像Vimeo这样的新兴创业公司来说,这是一种理想的语言。 PHP的解释器使企业家能够快速开发原型,并且它带有一个大型标准库,该库消除了发送电子邮件和访问数据库等常见任务的麻烦。

大多数初创企业都失败了,但是大约十年后,一些基于PHP的初创企业仍然存在。一些人实现了飞速增长,其中一些人(最著名的是Facebook)认为PHP是瓶颈,并开始从PHP迁移出去。发生这种小型迁移的主要原因有两个:PHP的性能以及维护大型PHP代码库的挑战。

在2014年,性能方面的PHP比所需的速度慢,并且数组消耗的内存比必要的多得多。由于缺乏可以大规模检测错误的好的静态分析工具,维护大型PHP代码库也变得更加困难。

自2004年以来的十年中,Vimeo和我们的PHP代码库都增长了很多倍,但我们的增长还不足以使这些问题真正被我们所接受。但是,当Facebook公开放弃PHP时,这里的一些开发人员认为PHP正在成为互联网时代的FORTRAN。一批新的后端工程师计划了如何将500,000行PHP分解为一系列设计更好,速度更快且可测试性更高的Go服务。

有一阵子迫在眉睫,但是我们从来没有放弃过PHP。有一些明显的原因-重写整个代码库会占用大量资源并且容易出错-但也有一个不太明显的原因:PHP变得更好。

说“ PHP变得更好”并不能完全代表其转型。在过去的六年中,PHP的执行时间减少了一半以上,该社区也得到了巨大的发展,现在有一种流行的驱动程序可以利用静态分析获得的见解来改进PHP代码库(旧的和新的)。

PHP的改进花了一段时间才出现在Vimeo上。首先,我们必须停止使用PHP 5.4的旧版本,该版本已在其过期日期多年后投入生产。迁移到PHP 7可以使我们的后端响应速度更快,此外,PHP 7改进的语法使我们的开发人员可以编写更简洁的代码,并全面支持返回和参数类型。

PHP一直没有停止创新-两周前发布的版本8带来了许多语言级别的改进,使我们的开发人员可以更简洁地表达业务逻辑。我们期待着明年年初进行升级。

PHP使入门变得非常容易,但是开箱即用,并不能提供很多保护,以防止自己被脚踩死。多年来,无数开发人员在短时间内尝试了PHP,无意间将自己打了个脚,然后放弃了该语言。

我偶尔也会用PHP踩脚,但我没有放弃,而是决定构建一个可以提高目标的工具。因此,Psalm(PHP的静态分析类型检查器)诞生了。

Psalm的核心功能与TypeScript的检查器大致相似,它借鉴了Facebook(源自PHP的)Hack语言的一些想法。 Psalm会告诉您何时PHP代码可能在生产中导致类型错误,以及何时您的逻辑没有意义。它增加了一些额外的功能,例如未使用的类和方法检测,并且Psalm可以修复它自动发现的许多问题。

在过去的几年中,将Psalm用作CI管道的一部分已对我们在Vimeo编写PHP的方式产生了变革性影响:Psalm使我们有信心进行大规模更改,而不必担心会破坏所有内容。

这些更改(其中一些在我们的代码库中引入了现代PHP编码标准)有助于消除遗留的气味-当可以安全地更改代码时,它不再是真正的遗留代码。

我建立了Psalm来解决我的问题,但现在我们将其开源,它也帮助解决了许多其他人的问题。 Psalm最近还帮助我们在代码库中发现了大量安全漏洞,然后才被坏人利用。

顺便说一句,如果任何阅读此文章的人都害怕大型的遗留PHP项​​目,而又害怕对其进行较大的更改,那么我强烈建议他们开始使用静态分析类型检查工具。 Psalm(和类似工具)可以解决代码库中的现有问题,从而使您能够缓慢地提高代码质量。

在2000年代中期,还没有完善的PHP ORM,因此我们建立了自己的PHP ORM。幸运的是,PHP提供了许多构建简单的ActiveRecord风格的ORM的构建块,包括MySQL支持,查询参数绑定以及魔术getter和setter。这也有助于我们拥有一些非常聪明的工程师来完成任务。

我们ORM的最后一次重大升级是十年前。它进行了一些小的改进-错误修复,更好的类型和一些新功能-但基本结构没有改变。

多年来,已经尝试了使用不同的ORM的尝试,但是这些提议都不是为了响应新的业务需求而提出的,而是出于对ActiveRecord模式的不满。

最终,这些提议都没有得到落实。事实证明,如果使用旧代码,则旧代码可能比新代码更好:

保留可靠的旧代码也使我们有机会将我们的工程精力集中在为业务带来实质性收益的事情上,而且我有义务(但也很高兴)说Vimeo最近投入了大量精力很棒的新产品,例如Vimeo Record。

十年前,许多开发人员写了一点PHP,此后便开始使用更受人尊敬的语言。 他们经常渴望告诉其他人,他们不再编写PHP感到很放心,以及如何无法赎回它。 我在这里告诉你它可以做到,而且Vimeo在PHP上的持续成功证明,它是2020年快速发展的公司的绝佳工具。 PHP的复兴至少改变了一位前反对者。 一位长期使用该语言的同事和评论家把我放在一边,非常恳切地感谢我,向我表明“使用PHP不一定很糟糕”。