您现在的位置:首页 » 红经验 » 最新动态

最“好”的编程语言 PHP 真的无药可救了吗?

2020-12-29 11:00:59

【编者按】PHP到底是不是最好的语言这个梗已经人尽皆知了,有些人对PHP浅尝辄止,有些人与PHP共同成长。而Vimeo属于后者。

Vimeo是美国流行的原创高清视频播客网站,vimeo禁止用户上传任何非原创的视频内容。本文作者是Vimeo研发专家Matt Brown,他在文中分享了为何Vimeo从初创公司发展至今,一直对PHP不离不弃的原因。世界上没有最好的工具,只有和工具一同成长的人。本文共2065字,全文阅完共需3分钟。

原文标题:It's not legacy code-It's PHP

原文链接:https://medium.com/vimeo-engineering-blog/its-not-legacy-code-it-s-php-1f0ee0462580

编译 | PUXI

头图 | CSDN 下载自东方 IC

2019年,Vimeo已经使用多种语言共同进行开发建设,PHP、Go、Ruby、Node JS、Java、C、C++和一些Rust。而早在Vimeo刚成立的2004年,我们还只用PHP。对于初创公司来说,PHP真的是一个非常理想的语言。

但是我知道,现在有很多初创公司都不再选择使用PHP了,有一些公司认为PHP是公司限制发展的瓶颈(Facebook),便逐渐减少了对PHP的应用。

开发者离开PHP

我们先说说用户离开PHP的原因吧。归根有两大主要原因:PHP性能表现欠佳,以及PHP代码库维护很复杂。

确实。

2014年的PHP(PHP5.6)性能很低,数组所占用的内存越来越多,缺少好用的Bug规模查找分析工具,PHP大型代码库的维护也越来越难。

而对于Vimeo来说,Vimeo的业务从2004年起已经迭代增长了很多倍,我们的PHP代码库也在持续增长,但是我们还能够应对逐渐复杂的PHP代码库,PHP所存在的问题还没有真正阻碍我们发展。可是当Facebook公开宣布放弃PHP之后,一些开发者认为PHP会变成“祖传代码”——FORTRAN,所以在开发者中也兴起了一波从PHP转向Go开发的风潮。但是我们从没有放弃过PHP。

我们从未放弃PHP

重写一个全部的PHP代码库需要耗费很多资源,也很容易出错,但是这会让PHP变得更好。也许“PHP变得更好了”这个描述来评价PHP的变化也并不够客观,但是在过去的六年中,我司PHP的执行时间减少了一半,社区快速增长,也有了静态分析工具去完善PHP代码库。

在Vimeo,是花费了相当一段时间才看到对PHP改造所带来的效果的。

首先我们从PHP4.5迁移到了PHP7版本,PHP 4.5这版本已经非常陈旧了。迁移到PHP7之后,我们的后端明显响应速度更快,PHP7自身也改进了语法,例如在函数中可以指定返回值类型,函数的形参类型声明可以是标量等等,这些新语法可以让开发者去写更简洁的代码。要知道PHP没有停止创新。12月初,PHP 8 版本也发布了,带来了众多新功能:JIT编译器、联合类型等等,开发者能够更高效地进行开发,目前PHP 8 的开发很活跃,这让我们非常期待接下来一年PHP的更新。

改造PHP

我们知道,PHP开发入门很容易,但是这种开箱即用的特征没有为开发者提供足够的保护,很容易为开发者埋下隐患,正是因为有太多的开发者踩过PHP的坑,才慢慢地弃用了PHP。

我曾经也踩过PHP的坑,但是我没有放弃,而是决定去搭建一个能够帮助我完成我目标的工具,填上我的坑。而我搭建的工具就是Paslm,一个用来自动查找Bug的静态分析工具。

Psalm的核心功能和TypeScript的检查器很像,同时也从Facebook开发的Hack中借鉴了一些经验。当你的代码产生类型错误或者逻辑不成立时Psalm会提醒你。Psalm也会自动修复大部门它发现到的问题。最近Psalm便帮了我们一个大忙:帮助我们发现了大量我们代码库中的安全隐患,得以让我们在攻击者发现他们之间进行解决。

过去几年,Psalm帮助我们及时发现Bug,帮助开发者更容易地去集成代码,这对我司编写PHP产生了很好的正面影响,我们不必担心对原有的代码造成破坏,让我们有自信去做更大规模的优化改变。

PHP新版本的发布消除了它的那种陈旧感,PHP应该积极尝试去改变它的源码。我建造Psalm解决了我自己的问题,同时也将其开源,帮助其他人解决了更多的问题。顺便说一下,如果阅读这篇文章的你有PHP项目,项目有历史遗留的陈旧问题,但是又害怕破坏原有结构而带来更大问题,那么我强烈建议你使用Bug追踪工具。无论是Psalm还是其他工具都可以尽早地帮助你发现问题,让你提高代码质量。

不去攻克,困难便永远在那里

在Vimeo刚创立的那年(2004),PHP还没有成熟的ORM,但幸好PHP为制作简单的ActiveRecord样式的ORM提供了大量的构建块,如MySQL支持、查询参数绑定以及getter和setter。所以我们构建了自己的ORM。

而ORM上次更新是十年以前了,期间它也有一些微小的升级,像修复小bug,更新类型和特性等等,但是基本的主体架构这么多年一直没有变过。

很多人尝试过使用不同的ORM,但这些尝试很多都不是针对新的业务需求而提出的,而是出于对PHP ActiveRecord模式的不满,可是要知道,没有一个工具或者语言能完全满足你的要求。

如果旧的代码能做到高效,容易测试,便于追踪问题等等特性,旧代码也是很好的,很幸运通过我们的努力我们现在的ORM可以满足以上所有需求。

最后想说

许多开发人员在十年前只写了一点PHP,便转向了其他更受欢迎的语言。他们常常急于告诉别人PHP是多么的糟糕,以及不再编写PHP是多么的令人宽慰。在这里我告诉你,Vimeo使用PHP成功的案例,便可以证明即使是在2020年,PHP对于初创公司的仍一个很好的工具。

无论如何,PHP的复兴至少改变了一位曾经的反对者。

一天,我的一位同事和长期批评PHP的人把我拉到一边,非常真诚地感谢我向他展示了“使用PHP并不一定很糟糕”。