当前位置: 首页 > 科技观察

PHP可以创造成功:旧代码不一定是遗留代码

时间:2023-03-13 08:31:15 科技观察

-PHP、Go、Ruby、Python、NodeJS、Java、C、C++和Rust。2004年,Vimeo开始使用PHP。对于像Vimeo这样的初创公司来说,PHP是一种理想的编程语言。PHP的解释器可以让创业者快速开发原型,它自带一个庞大的标准库,可以减少发送电子邮件、访问数据库等常见任务的步骤。大部分创业公司都死在了中间,但也有一些基于PHP的创业公司在十年后依然屹立不倒,有的甚至成长迅速,一跃而上。其中一些公司(最著名的是Facebook)认为PHP是阻碍公司发展的瓶颈,并开始从PHP迁移。造成这种小规模迁移的主要原因有两个:一是PHP性能不佳,二是大型PHP代码库难以维护。从2014年开始,PHP的性能发展逐渐跟不上需求,数组内存的消耗超出了必要。由于缺乏可以大规模检测错误的静态分析工具,维护大型PHP代码库变得越来越困难。自2004年以来的十年间,Vimeo的规模增长了数倍,PHP代码库也随之增长,但并没有阻碍其自身的增长。但当Facebook公开放弃PHP时,一些开发人员认为PHP即将成为互联网时代的FORTRAN。新一代后端工程师计划如何将50万行PHP分解为一系列设计更好、速度更快、更可测试的Go服务。有一段时间,它似乎迫在眉睫,但我们从未真正放弃过PHP。原因很明显——重写整个代码库会占用大量资源并且容易出错;但还有一个不太明显的原因,即PHP变得更好了。在过去的六年中,PHP执行时间减少了一半以上,社区迅速发展,现在有一个流行的驱动程序可以使用从静态分析中获得的见解来改进PHP代码库(旧的和新的)。在Vimeo实施PHP改进需要一段时间。首先,我们不得不弃用旧版本PHP5.4,它在过时多年后仍在生产中。迁移到PHP7可以使后端响应更快。此外,PHP7改进的语法让开发者可以更简洁地编写代码,并为返回和参数类型提供全面的语言级支持。PHP一直在创新——前不久发布的第8版在语言层面做了很多改进,让开发者可以更简洁地表达业务逻辑。我们期待明年初的升级。PHP入门非常容易,但“好用”并不能保证没有反弹。多年来,无数开发人员尝试过让PHP崩溃,不小心射中了它的脚,然后放弃了。我偶尔也会被PHP折磨,但我没有放弃,而是决定构建一个可以提高准确性的工具。因此,Psalm(PHP的静态分析类型检查器)诞生了。Psalm的核心功能大致类似于TypeScript检查器,借鉴了Facebook的Hack语言(源自PHP)的一些思想。当PHP代码在生产中导致类型错误和语言逻辑障碍时,PHP会发送通知。Psalm添加了一些额外的功能,例如未使用的类和方法检测,并且可以自动修复检测到的许多问题。在过去的几年里,我们将Psalm用作我们CI管道的一部分,它对我们在Vimeo编写PHP的方式产生了变革性的影响:Psalm让我们有信心进行大规模更改,而不必担心破坏一切。这些更改(将现代PHP编码标准引入我们的代码库)有助于删除旧代码的痕迹:当代码可以安全更改时,它就不再是真正的遗留代码。我创建Psalm是为了解决我自己的问题,但现在Psalm是开源的,它也帮助解决了许多其他人的问题。Psalm最近还帮助我们识别了代码库中的大量安全漏洞,以免它们被恶意利用。顺便说一句,如果您害怕对大型遗留PHP项目进行重大更改,那么我强烈建议您使用静态分析类型检查工具。Psalm(和其他类似工具)可以修复代码库中的现有问题,并帮助您随着时间的推移提高代码质量。在2000年代中期,还没有完善的PHPORM,因此我们构建了自己的ORM。PHP为创建简单的ActiveRecord风格的ORM提供了很多构建块,包括MySQL支持、查询参数绑定以及神奇的getter和setter,这也帮助我们聚集了一批有才华的工程师来完成这个项目。任务。我们的ORM的最后一次重大升级是在十年前。进行了一些小改进——错误修复、类型升级和一些新功能——但基本结构没有改变。这些年,我们也尝试过使用不同类型的ORM,但这些尝试并不是为了应对新的业务需求而提出的,而是出于对ActiveRecord模型的不满。最后,这些建议都没有得到实施。事实证明,旧代码在以下情况下优于新代码:高效工作静态分析干净测试运行良好是常用代码值得庆幸的是,我们现有的ORM满足上述四个要求。留下可靠的遗留代码也让我们有机会专注于为业务带来真正利益的事情。我负责任地说,Vimeo最近一直在增长,有很多很棒的新产品,比如VimeoRecord。十年前,许多开发人员编写了部分PHP,然后转向其他更流行的语言。他们常常急切地告诉人们不要再写PHP了。我想告诉大家,PHP是可以成功的。Vimeo在PHP方面的持续成功证明它是公司在2020年快速增长的绝佳工具。PHP的崛起至少改变了一个反对者。我的一个同事,以前一直批评PHP,有一天把我拉到一边,非常真诚地感谢我告诉他“使用PHP不一定是坏事”。