2006-09-16

PHP之怪现象[3]

这次要说的怪现象在于PHP的性能问题,且不说PHP的性能有多差,因为毕竟是一个脚本语言,不能奢望其速度多快,但PHP的性能的奇怪问题确实很特别:

  1. 版本的提升并未带来性能的提升——PHP5比PHP4慢
  2. 通过一些字节码优化器来大幅度提高性能
关于第一点,可以看一些对比(数据来自http://byster.net/):


PHP: version 4.3.10 vs PHP: version 5.0.5
PC: Celeron 2.0Mhz / 512Mb

PHP 4 PHP 5

Creating int array[100 000]

for vs while
code
[ms]
for($i=0;$i<10000;$i++)0.0630.087
while($i<10000)>0.0570.086

Reading int array[100 000]

while vs foreach vs or
foreach($arr1 as $vl) {..} 0.0850.171
while(list(,$vl) = each($arr2)) {..} 0.2610.335
for($i=0;$i<10000;$i++)0.1230.163

Reading apache log (16Mb)

file vs file_get_content vs fread
$a = file("t1.log");0.2700.274
$b = file_get_contents("t1.log");0.1200.121
.. $c = fread($hdl, $size); .. 0.1330.141

Parse vars names [100 000]

"test$i" vs "test".$i vs ‘test’.$i
for(…) {$c = "test$i";}0.3160.354
for(…) {$c = "test".$i;}0.2050.236
for(…) {$c = ‘test’.$i;}0.2050.236

Parse and find text from apache log (32Mb)

ereg vs preg_match
eregi("2005:03:04",$txt);3.5043.521
preg_match("/2005:03:04/im",$txt);0.1080.735

Split text apache log 200Kb (contain 2000 "-")

split vs explode
split("-",$txt);1.5611.573
explode("-",$txt);0.1930.197

Count array size. $arr = int[100 000]

count vs sizeof
for($i=0;$i<count($arr);$i++)0.1980.276
for($i=0;$i<sizeof($arr);$i++)0.1980.268

Create object by Ref (loop 100 000)

with ref vs without ref
(…) {$j = & new TestClass();}0.4601.180
(…) {$j = new TestClass(); }0.4701.291

Random number generator (loop 100 000)

srand vs mt_srand
(…) { srand(); } 0.1850.193
(…) { mt_srand(); } 0.9290.989

Calculate hash (loop 100 000)

srand vs mt_srand
(…) { md5($i."byster.net".$i); } 1.3061.365
(…) { sha1($i."byster.net".$i);}1.4921.662
至于第二点,其实也不用多说了,Zend Encoder、Zend Optimizer、eAccelerator、APC等等,而不得不提的是 ,经过Zend Encoder过的PHP代码,只能在有Zend Encoder或者Zend Optimizer的情况下才可以运行,而Zend Encoder是个商业软件。

没有评论: