|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不过还好,PHP语言给出的语法错误很详细,只要稍微熟悉一点之后,看错误提示就能很容易找出错误所在的。PHP还有一个特别好用的调试功能,在PHP语句中,你可以随时用echo来输出结果。法式|优化 把握了PEAR::BenchMark,如今你已晓得若何测试你的代码,晓得若何判别你的代码是快是慢,是哪一部分对照慢。那末接上去我要说的就是若何没落或优化那部分慢的代码。
这一点上我团体最次要的经历只要两点,一是消弭毛病的或低效的轮回;二是优化数据库查询语句。其实还存在一些其它的优化细节,好比“str_replace比ereg_replace快”、“echo比print快”等等。这些我临时都放在一边,稍后我会提到用缓存来凑合过于频仍的IO。
上面咱们将三个功效不异,但法式写法分歧的函数的效力(损耗的工夫)停止对照。
badloops.php
<?php
require_once('Benchmark/Iterate.php');
define('MAX_RUN',100);
$data = array(1, 2, 3, 4, 5);
doBenchmark('v1', $data);
doBenchmark('v2', $data);
doBenchmark('v3', $data);
function doBenchmark($functionName = null, $arr = null)
{
reset($arr);
$benchmark = new Benchmark_Iterate;
$benchmark->run(MAX_RUN, $functionName, $arr);
$result = $benchmark->get();
echo '<br>';
printf("%s ran %d times where average exec time %.5f ms",$functionName,$result['iterations'],$result['mean'] * 1000);
}
function v1($myArray = null) {
// 效力很差的轮回
for ($i =0; $i < sizeof($myArray); $i++)
{
echo '<!--' . $myArray[$i] . ' --> ';
}
}
function v2($myArray = null) {
// 效力略有进步
$max = sizeof($myArray);
for ($i =0; $i < $max ; $i++)
{
echo '<!--' . $myArray[$i] . ' --> ';
}
}
function v3($myArray = null){
//最好效力
echo "<!--", implode(" --> <!--", $myArray), " --> ";
}
?>
法式输入的了局也许是如许的:
v1 ran 100 times where average exec time 0.18400 ms
v2 ran 100 times where average exec time 0.15500 ms
v3 ran 100 times where average exec time 0.09100 ms
可以看到,函数的履行工夫变少,效力上升。
函数v1有个很分明的毛病,每次轮回的工夫,都需求挪用sizeof()函数来盘算。函数v2则在轮回外把$myArray数组的元素个数存到$max变量中,防止了每次轮回都要盘算数组的元素个数,所以效力进步了。函数v3的效力最高,使用了现成的函数,防止轮回。
这个例子只是给你一个理性的熟悉,分明甚么是绝对高效的代码。在实践开辟中,我信任会有良多人会恍恍惚惚地写出良多低效力的代码。要把代码写得精华精辟而高效,生怕需求工夫去锻炼:-) 但这是另外一个话题了,咱们略过不谈。
数据库使用根基上每一个PHP法式城市用到,在实践开辟中我发明最影响全部体系效力的就是数据库这部分。至于数据库的优化和数据查询语句的优化,在此限于篇幅不具体会商。读者可参考《MySQL查询优化手艺讲座》 怎么样出来了吧,怎么样自己也可以写出php程序了,虽然离职业和专业的人还有很远,但是好的开始是成功的一半。这个时候改怎么做了呢。现在就是拿1本高手推荐的书,重头到尾读1遍,我说的这个读是自己看。 |
|