5个PHP代码性能优化秘籍
PHP无疑是Web开发者最喜欢的开发语言之一。不过,当一个项目越来越大时,就需要对 PHP代码进行管理,如此项目才能运行得更快更有效。想优化PHP代码,首先要对PHP内置函 数的机制进行深层了解,然后对其进行测试。 开发者可使用下面介绍的五个方法优化PHP代码性能。 1.Loop 每个程序都会提出很多Loop请求。而循环对效率的影响极大。如你所知,有很多方法可 用来定义PHP中的循环。但是你知道哪种方法是最好的吗? 比较for()循环,foreach和while()循环之间的性能: 对foreach,while()和for()loop进行测试,要求其运行相同函数,对一个Hash数组 进行循环。给定的是一个Hash数组,每次输入都包含一百个要素,24字节的密钥和10k数据。 foreach循环 unset($i,$tmp);//TestSourcefunctionTest1_1(){global$aHash;/*TheTest*/$t=microtime(true);reset($aHash);foreach($aHashas$val);return(microtime(true)}//VariableClean-upfunctionTest1_End(){global$aHash;unset($aHash);}?>while()循环 while($i<10000){$tmp.='a';$i;}$aHash=array_fill(100000000000000000000000,100,$tmp);unset($i,$tmp);//TestSourcefunctionTest1_2(){global$aHash;/*TheTest*/$t=microtime(true);reset($aHash);while(list(,$val)=each($aHash));return(microtime(true)-$t);}//VariableClean-upfunctionTest1_End(){global$aHash;unset($aHash);}?>for()循环
$val);return(microtime(true)-$t);}//VariableClean-upfunctionTest1_End(){
global$aHash;unset($aHash);}?>结果:1.foreach()循环的执行时长为8微秒2.while()循环的执行时长为58微秒3.for()循环的执行时长为11微秒在此测试中,我们发现foreach循环是最快的。它比while()循环明显快很多,比for()循环快一点点。不过,在某些情况下,我们可能会使用for()循环。我们怎样才能用for()循环进行性能优化呢?优化for()循环的性能为了优化for()循环的性能,最大循环数应该被预先计算在for()循环之外。 unset($i,$tmp);//TestSourcefunctionTest3_1(){global$x;/*TheTest*/$t=microtime(true);$size=count($x);for($i=0;$i<$size;$i);return(microtime(true)-$t);}//VariableClean-upfunctionTest3_End(){global$x;unset($x);}?> $tmp.='a';$i;}$x=array_fill(5,1000,$tmp);unset($i,$tmp);//TestSourcefunctionTest3_2(){global$x;/*TheTest*/$t=microtime(true);for($i=0;$i
上面的示例显示了写循环的两种不同方式。二者的不同在于第二个没有多次运行计算操作。第二种比第一种快很多。完成第一种的时间使是133微秒,完成第二种的时间是59750微秒。因此,预计算过的最大循环数可以有效提升性能。2.预增量vs后增量
有很多方式可以增加特定值。$i;$i$i=1;$i=$i1;上述几种里,哪种最有效呢?在PHP中,预增量似乎比其他都好。且比后增量要好10%。PHP中其实并没有什么衡量标准,但是笔者在C中发现了一个类似的。可能这对于普通程序员而言没有什么太大差异,但是对于那些进行微调工作的人而言还是有影响的。但多数人更倾向于预增量。3.句点连接VS逗号连接当你要在两个字符串/变量之间进行连接时,你会使用句点还是逗号?$a='10PHPprogramming';$b='ImprovementTips';#10PHPProgrammingImprovementTipsecho