今天看到这篇
How efficient is OOP in PHP?,其中对 php 使用class、function和什么都不用直接执行的效率进行了对比,列出了数据和图表,但是其测试是在 2003年进行的,当时的 php 版本还比较老,而且那会儿 php5 还没有发行版本吧,在我自己的机器下测试用了一下 php4 和 php5 的上述3 种方式的大概情况。
代码还是用那个测试中的:
| OOP (a.php) | Function (b.php) | 两者都不用 (c.php) |
class test
{
}
for ($i=0; $i<1000000; $i++)
{
$testclass=new test();
$cnt+=$testclass->one(); } | function one()
{
}
for ($i=0; $i<1000000; $i++)
{
} | for ($i=0; $i<1000000; $i++)
{
} |
首先在 php 4.3.10 下测试,以下是执行时间列表:(单位:秒)
| # | OOP | Function | 两者都不用 |
| 1 | 4.777 | 1.678 | 1.008 |
| 2 | 4.883 | 1.672 | 1.040 |
| 3 | 4.749 | 1.746 | 1.011 |
| 4 | 4.946 | 1.728 | 1.020 |
| 5 | 4.764 | 1.768 | 1.007 |
| 6 | 4.734 | 1.740 | 1.014 |
| 7 | 4.765 | 1.719 | 1.028 |
| 8 | 4.973 | 1.680 | 1.011 |
| 9 | 4.732 | 1.835 | 1.014 |
| 10 | 4.799 | 1.753 | 1.011 |
| 平均值 | 4.8122 | 1.7319 | 1.0164 |
我的机器配置是 P4 1.60GHz with 512RAM;webmasterstop那个测试的配置是双Xeon 2.0Ghz with 2GBRAM,我的机器还是差一些;不过从测试结果来看,我的结果和 2003 年那会儿差不多,或者还好一点,可以看出 php 从 2003年到现在本身的效率方面还是提高了不少。
接着在 php 5.04 下测试,以下是执行时间列表:(单位:秒)
| # | OOP | Function | 两者都不用 |
| 1 | 4.207 | 1.995 | 1.219 |
| 2 | 4.465 | 1.982 | 1.158 |
| 3 | 4.554 | 1.909 | 1.200 |
| 4 | 4.058 | 1.918 | 1.157 |
| 5 | 4.143 | 1.917 | 1.184 |
| 6 | 4.037 | 1.928 | 1.165 |
| 7 | 4.125 | 1.976 | 1.154 |
| 8 | 4.056 | 2.021 | 1.168 |
| 9 | 4.216 | 1.905 | 1.193 |
| 10 | 4.154 | 2.041 | 1.157 |
| 平均值 | 4.2015 | 1.9592 | 1.1755 |
php5 下的测试结果和 php4 环境下的对比:使用 OOP 的效率由平均执行时间 4.8 秒变为 4.2 秒,效率有比较大的提高;使用 Function 和直接执行的情况变化不大,php5 环境下还稍微差了一点点。
总体来看,虽然基于 OOP 开发比较方便,有众多优点,但 OOP 方式的执行效率还是比 Function或直接执行差一些,也不能忽视,找到开发和效率的平衡点是需要考虑的一个问题。在众多开源项目中,phpMyAdmin目前好像还是一直是基于过程的,大部分都使用 Function,连模板(Template)也不用,php 代码直接和 HTML直接混在一起,这样代码维护可能麻烦些,phpMyAdmin在开源项目中也算是特立独行吧。