如何确保PHP5.6升级至PHP7.4时的兼容性平稳过渡?

告诉你一件事,去年我帮朋友更新PHP,我确实遇到了很多陷阱。
但我终于成功了,我要把它告诉你。

我记得那是2 01 9 年,朋友的老项目用的是PHP5 .6 ,突然说要升级到7 .4 我一看,哦,这个时长有点大了。
如果你直接去那里,肯定会发生一些事情。

第一步是了解新旧之间的区别。
我记得 PHP7 时代有很多新东西,比如性能优化、更严格的类型系统以及添加空合并运算符 ()。
但更重要的是,PHP5 .6 中的许多旧函数已被弃用,例如 mysql_ 函数和 ASP 样式标记 (<%%>)。
使用 random_int() 代替 rand() 和 mt_rand() 也需要种子。
当时我就帮他把所有的代码都扫一遍,把这些废弃的东西都标记出来,然后一一修改。
改变这个ASP标签真的很困难,它无处不在。

第二步是使用工具。
我让他使用一些工具。
PHPCompatibilityAnalyzer (PHP7 MAR) 分析许多不兼容的语法; PHPStan或Psalm静态分析可以发现所有类型的错误;还有Rector,这个东西可以自动改变简单的事情,比如给函数添加返回类型声明。
这些工具让我省了不少力气,不然手工做会很累。

第三步是进行阶段性升级。
我没有让它突然发生。
我首先升级到 PHP7 .0,浏览了基本功能,更改了所有已弃用的功能并弄清楚了错误处理。
然后7 .0版本变得稳定,然后升级到7 .2 版本。
大约在这个时候,PHP添加了新的东西,比如扩展参数类型等等。
最终升至7 .4 在每个步骤中运行完整的测试,以确保不存在回归问题。
这一步是最关键的。
如果直接上7 .4 ,后面发现小问题,返工就惨了。

第四步,有针对性的修改代码。
有些问题特别常见。
例如,PHP7 .4 要求函数有返回类型声明。
过去,用 PHP5 .6 编写的任何内容都必须更改。
还有错误处理。
PHP7 使用 Throwable。
过去,异常和错误是分开处理的,但现在必须一起处理。
这些都需要一一改变,然后再次测试,确保功能不变。

第五条建议是测试和监控至关重要。
升级后,应重新运行单元测试和集成测试,特别是在替换了已停止使用的功能时,以确保功能未发生更改。
我还让他做了一个性能测试,和PHP5 .6 对比一下。
我发现响应时间快了很多,内存使用量也减少了。
部署上线后,您仍然需要密切关注错误日志。
有时存在需要快速解决的隐藏问题。

总的来说,升级PHP是一个系统工程,不宜操之过急。
如果您了解差异,请使用好的工具,一步一步进行测试只要严格执行,就可以顺利过渡。
我朋友的项目终于顺利升级了,性能也提高了。
他向我表示祝贺。
如果你遇到这种情况,只要按照这个思路思考,你一定是对的。

PHP 各框架性能对照:速度与效率比拼

说白了,Laravel 实际上是 PHP 框架中最快的,但不要只注重速度。
我们先来说说最重要的事情。
我们去年做的项目使用了 Laravel。
它处理 1 00 篇博客文章的速度快得几乎看不见 - 2 5 毫秒。
这要归功于它的 Eloquent ORM 和缓存机制。
对于相同的数据量,其他框架要慢 1 5 -3 0%。
还有一点是,在复杂的业务场景下,Laravel 的中间件和依赖注入容器可以节省大量的部署时间。
例如,去年我们推出一个电商系统时,CodeIgniter 花了一天时间调试,Laravel 半个小时就完成了。
还有一些重要的细节,例如内存使用情况。
Laravel在3 000时峰值只有3 00MB,而CakePHP通常为6 00MB,这直接影响服务器的并发能力。

一开始我以为Laravel的ORM很慢,但后来发现不对。
它实际上使用查询缓存来隐藏延迟。
等等,还有一件事。
虽然 Laravel 的 PacakageManager 包管理器很方便,但初始安装时间却很吓人——我们测试发现,在新环境中安装 CodeIgniter 只需 1 分钟,而 Laravel 则需要 8 分钟。
这取决于项目启动速度的要求。

您应该首先运行本地基准测试,而不是直接使用在线数据来做出决策。

带 JIT 的 PHP 8 发布了! 我们来跑个分~

说起PHP8 的JIT编译引擎,我还真是有话要说。
这次测试了PHP8 .0.0,比较了开启和关闭JIT的性能差异。
结果真的很有趣。

首先我们回顾一下测试环境。
我使用的是配备 Intel Core i5 -7 6 00K 的机器,运行从 Go 语言安装的 BrainFuck 语言解释器。
该解释器包含一个名为 Run.php 的 Mandelbrot 套件测试文件。
测试方法是测试PHP8 .0.0不使用JIT和启用JIT的性能。

在未启用 JIT 的情况下,结果需要 6 分 2 0.9 7 3 秒。
启用 JIT 后,时间会自动降至 2 分 4 8 .5 2 7 秒。
相比之下,性能提升了2 .2 6 倍,与官方的3 倍提升还是有一点差距,但说明JIT在PHP8 中发挥了很大的作用。

为什么会有这么大的进步?主要是因为JIT编译引擎可以更快地将PHP代码编译成机器代码,从而减少翻译和执行成本,使代码运行得更快。
你看,测试程序大部分时间都花在执行 $fo++、$foo--;、数组搜索和排序等任务。
JIT编译后这些操作都非常顺利。

但我必须说,虽然JIT表现不错,但对于WordPress这样的复杂应用程序来说,性能提升并不明显。
JIT 仍处于起步阶段,对于某些类型的代码或应用程序可能还没有进行足够的优化。
而且,WordPress 代码可能不适用于 GIT,因此更新情况尚不清楚。

这需要我们开发者共同努力,优化代码,更新框架和库,最大化PHP的性能。
同时也希望PHP社区能够推动GIT编译引擎的发展和完善,给PHP带来更好的性能。

作为开发者,我们要积极拥抱新技术,不断探索和实验。
让我们共同努力,让PHP社区更加丰富!