PHP能创造成功:旧代码不一定是遗留代码 冷不防 2023-01-08 08:22 116阅读 0赞 > 全文共2401字,预计学习时长7分钟 ![4cd815aa1ec03200f9a4d05e016489d0.png][] 图源:Google 过去的一年里,Vimeo开发人员用多种编程语言编写了后端代码——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变得更好了。 ![d9db9ebbac9e372de0eb97847182d793.png][] 在过去的六年里,PHP执行时间减少了一半以上,社群发展迅速,现在有一种流行的驱动程序可以利用静态分析获得的见解来改进PHP代码库(旧的和新的)。 PHP的改进花了一段时间才在Vimeo应用。首先,我们必须弃用旧版本PHP5.4,该版本在过期多年后仍在生产。迁移到PHP 7可以使后端响应速度更快,除此以外,PHP 7改进后的语法使开发人员编写代码更简洁,并对返回和参数类型提供全面的语言级支持。 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(及其他类似工具)可以解决代码库中的现有问题,帮你慢慢提高代码质量。 在20世纪中期,还没有完善的PHP ORMs,所以我们建立了自己的PHP ORM。PHP提供了大量构建基块,用于创建简单的ActiveRecord风格的ORM,包括MySQL支持、查询参数绑定以及神奇的获取器和设置器,而这也有助于我们聚集一批优秀工程师来完成这项任务。 我们的ORM最后一次重大升级是在十年前。进行了一些小的改进——Bug修复、类型升级以及一些新特性——但基本结构没有改变。多年来,我们也尝试过使用不同类型的ORM,但这些尝试提议都不是为了响应新的业务需求,而是出于对ActiveRecord模式的不满。 ![7a565f84aa8aafe0d66ce560fd7bf99a.png][] 图源:unsplash 最终,这些提议都没有得到落实。事实证明,如果旧代码能够有以下优点,那它们比新代码更好: · 工作高效 · 静态分析简洁 · 测试运行良好 · 是常用代码 谢天谢地,我们现有的ORM满足上述四个要求。 保留可靠的旧代码也让我们有机会将精力集中在为业务带来实质利益的事情上。而且我负责任地说,Vimeo近来一直不断发展,有大量像Vimeo Record这样很棒的新产品。 十年前,许多开发人员编写了一部分PHP后就转向了其他更受欢迎的语言。他们经常热切地告诉别人不要再编写PHP。我想告诉大家,PHP可以成功。Vimeo在PHP上的持续成功证明了它是2020年公司快速发展的一大利器。 PHP的崛起至少让一个反对者改变了看法。我的一位同事,之前一直批评PHP,有一天他把我拉到一边,非常真诚地感谢我告诉了他“用PHP工作并不一定很糟糕”。 ![e07bfb2f8188286cf7ec0595982bd326.png][] [4cd815aa1ec03200f9a4d05e016489d0.png]: /images/20221119/c626b2ea44064dc7961dcfdccc0314e9.png [d9db9ebbac9e372de0eb97847182d793.png]: /images/20221119/dbb0d094be18424187840967a28c6630.png [7a565f84aa8aafe0d66ce560fd7bf99a.png]: /images/20221119/40afdea2bd954039a24a00a4df17c9f0.png [e07bfb2f8188286cf7ec0595982bd326.png]: /images/20221119/223411ad28734c03a6d2b753444f9261.png
相关 项目升级:旧Java代码与新版本不兼容 在开发过程中,遇到旧Java代码与新版本不兼容的情况是很常见的。这可能由以下几种原因导致: 1. API变更:新版本的Java可能会对一些API进行改变,使得旧代码无法正常工 水深无声/ 2024年09月11日 09:48/ 0 赞/ 12 阅读
相关 MyBatisPlus代码生成器(旧)实现快速开发 1、导入相应jar包(以版本3.4.1为例) <!--代码生成器--> <dependency> <gro 心已赠人/ 2024年03月24日 17:02/ 0 赞/ 8 阅读
相关 不敲代码也能成“薪”宠 谈到互联网行业,大家首先想到是不是高薪的程序员?看中互联网,渴望高薪,却不懂编程?没关系,电商视觉设计岗位或许能成为你更好的就业选择。 近期,黑马电商视觉设计学科不断传出就业 以你之姓@/ 2024年03月22日 20:01/ 0 赞/ 38 阅读
相关 PHP能创造成功:旧代码不一定是遗留代码 > 全文共2401字,预计学习时长7分钟 ![4cd815aa1ec03200f9a4d05e016489d0.png][] 图源:Google 过去的一年里,Vimeo 冷不防/ 2023年01月08日 08:22/ 0 赞/ 117 阅读
相关 dw运行php代码显示代码_PHP代码显示而不是运行 dw运行php代码显示代码 You've written your first PHP program, but when you go to run it, all you 电玩女神/ 2022年12月06日 15:40/ 0 赞/ 133 阅读
相关 使用php代码判断数字是奇数还是偶数代码示例 使用php代码判断数字是奇数还是偶数代码示例 示例代码 第一种方法 第二种方法 示例代码 is_numeric($ 深碍√TFBOYSˉ_/ 2022年09月11日 07:17/ 0 赞/ 163 阅读
相关 Eclipse不能编译成功 注意:如果该工程有程序在运行,则不能编译成功,这就是我出现的状况 MyEclipse不编译解决1. 确保 project->buildautomatically 已经被 青旅半醒/ 2022年06月10日 06:11/ 0 赞/ 210 阅读
相关 eclipse 不能识别scala代码 红叉 eclipse Version: Oxygen.3a Release (4.7.3a) 安装了scalaIDE插件4.7.0 Release 与Oxygen兼容 安装 水深无声/ 2022年01月26日 07:37/ 0 赞/ 172 阅读
相关 架构师不写代码,能行吗? 从什么时候起,技术角色的提升就意味着脱离技术与交付?CTO 不写代码已经引起诸多争议了,架构师也不写代码,能行吗? 当我面试架构师职位的候选人时,我通常会问一个这样的问题:“ 柔光的暖阳◎/ 2022年01月14日 13:27/ 0 赞/ 201 阅读
还没有评论,来说两句吧...