随着PHP Group正式停止对PHP 4的维护支持,围绕性能升级的讨论又重新热了起来。借着这个机会,我们专门针对PHP 5平台做了一轮性能测试,看看不同版本在实际执行中到底有多大差距。测试结果其实挺直观的,PHP 5.x无论是面向对象还是面向过程的写法,在速度上都要优于PHP 4.x。换句话说,迁移到PHP 5平台不仅可行,而且值得。
测试环境
为了保证测试结果的可比性,所有测试都在同一套硬件和操作系统环境下完成:
- CPU: Intel Pentium 4 2.66GHz
- 内存: 1GB
- 硬盘: 73GB/SCSI
- 操作系统: FreeBSD 4.11
- Web服务器: Apache 1.3.37
测试工具选用了ab(当然也可以用http_load,原理一致)。这里需要先说明一个关键指标:RPS,即每秒请求数(Requests per second),数值越高代表性能越好。
PHP 4.4.2 测试结果
首先来看PHP 4.4.2的表现,测试命令均为ab -n 10000 -c 50。
函数 (Function)
测试结果:1047.23 rps
类 (Class)
不实例化类:1034.98 rps
实例化类:1006.14 rps
类的继承:992.95 rps
PHP 5.2.1 测试结果
然后是PHP 5.2.1的测试数据,同样使用ab -n 10000 -c 50。
函数 (Function)
测试结果:1176.06 rps
类 (Class)
不实例化类:1197.17 rps
实例化类:1187.93 rps
类的继承和抽象:1128.54 rps
测试结果和分析
将两组数据放在一起,直观对比一下:
| 版本 | 函数测试 | 不实例化类 | 实例化类 | 类的继承 |
|---|---|---|---|---|
| PHP 4.4.2 | 1047.23 rps | 1034.98 rps | 1006.14 rps | 992.95 rps |
| PHP 5.2.1 | 1176.06 rps | 1197.17 rps | 1187.93 rps | 1128.54 rps |
数据读到这里,结论已经非常清晰了:
- 整体来看,PHP 5.2的性能确实比PHP 4.4要高出不少,差距可不是一星半点。所以之前担心PHP 5平台性能会差的朋友,可以放心了。
- 在PHP 4.4中,类的解析速度明显慢于函数,一旦引入了继承,性能下降得更加明显。因此,在PHP 4环境下,面向过程编程以及避免深度继承的类结构,是比较稳妥的选择。
- 到了PHP 5.2,情况发生了逆转——类的执行速度不仅不慢,反而比函数还要快。这说明PHP 5的Zend引擎在面向对象处理上确实下了大功夫。无论是函数还是类,性能表现都相当均衡出色。
- 基于以上测试结果,在代码改动不大的情况下,从PHP 4升级到PHP 5平台,完全可行。而且PHP 5基本向下兼容PHP 4的代码,只有少部分特殊写法需要调整。考虑到PHP Group已经明确不再维护PHP 4,早升级,早安心。
从测试到实际部署,迁移的成本远低于预期,而性能提升的回报却实实在在。还在犹豫是否升级的小伙伴,不妨拿自己的项目跑一轮测试,结果会告诉你答案。