<p> 如何消灭或优化那PHP开发网站程序的代码呢?</p><p> 这一点上我个人最主要的经验只有两点,一是消除错误的或低效的循环;二是优化数据库查询语句。其实还存在一些其它的优化细节,比如“str_replace比ereg_replace快”、“echo比print快”等等。这些我暂时都放在一边,稍后我会提到用缓存来对付过于频繁的IO。</p><p> 下面我们将三个功能相同,但程序写法不同的函数的效率(消耗的时间)进行对比。</p><p> webjx.php</p><code><?php<br />require_once('Benchmark/Iterate.php');<br />define('MAX_RUN',100);<br />$data = array(1, 2, 3, 4, 5);<br />doBenchmark('v1', $data);<br />doBenchmark('v2', $data);<br />doBenchmark('v3', $data);<br />function doBenchmark($functionName = null, $arr = null)<br />{<br /> reset($arr);<br /> $benchmark = new Benchmark_Iterate;<br /> $benchmark->run(MAX_RUN, $functionName, $arr);<br /> $result = $benchmark->get();<br /> echo '<br>';<br /> printf("%s ran %d times where average exec time %.5f ms",$functionName,$result['iterations'],$result['mean'] * 1000);<br />}<br />function v1($myArray = null) {<br /> // 效率很差的循环<br /> for ($i =0; $i < sizeof($myArray); $i++)<br /> {<br /> echo '<!--' . $myArray[$i] . ' --> ';<br /> }<br />}<br />function v2($myArray = null) {<br /> // 效率略有提高<br /> $max = sizeof($myArray);<br /> for ($i =0; $i < $max ; $i++)<br /> {<br /> echo '<!--' . $myArray[$i] . ' --> ';<br /> }<br />}<br />function v3($myArray = null){<br /> //最佳效率<br /> echo "<!--", implode(" --> <!--", $myArray), " --> ";<br />}<br />?></code><p> 程序输出的结果大概是这样的:</p><p> v1 ran 100 times where average exec time 0.18400 ms</p><p> v2 ran 100 times where average exec time 0.15500 ms</p><p> v3 ran 100 times where average exec time 0.09100 ms</p><p> 可以看到,函数的执行时间变少,效率上升。</p><p> 函数v1有个很明显的错误,每一次循环的时间,都需要调用sizeof()函数来计算。 函数v2则在循环外把$myArray数组的元素个数存到$max变量中,避免了每次循环都要计算数组的元素个数,所以效率提高了。函数v3的效率最高,利用了现成的函数,避免循环。</p><p> 这个例子只是给你一个感性的认识,明白什么是相对高效的代码。在实际开发中,我相信会有很多人会迷迷糊糊地写出很多低效率的代码。要把代码写得精炼而高效,恐怕需要时间去锤炼:-) 但这是另一个话题了,我们略过不谈。</p><p> 数据库应用基本上每个PHP程序都会用到,在实际开发中我发现最影响整个系统效率的就是数据库这部份。至于数据库的优化和数据查询语句的优化,在此限于篇幅不详细讨论。</p>