当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP程序加速探索之代码优化

PHP
让我们来编写一些PHP实用的脚本
七种缓存使用武器 为网站应用和访问加速
动态网页PHP中引用&的使用注意事项
在PHP中全面阻止SQL注入式攻击
PHP自带可以代替echo调试的unit函数
小结:PHP动态网页程序优化及高效提速问题
php对特殊语句查询结果进行数组排序
实例:用PHP技术解决网站URL格式过长的问题
小结:PHP动态网页程序两个有用的小技巧
动态网页中直接不让访问PHP程序文件
网页实例:详细介绍用PHP来编写网页记数器
菜鸟学习:动态网页PHP基础学习笔记
利用Apache实现禁止图片盗链
PHP编程中常用的三则技巧
PHP制作的网站意见在线反馈表
大型Web需求解决方案 PHP定位突出
PHP实例:精确到每一秒钟的在线人数显示代码
实用:动态网页制作技术PHP的十个应用技巧
常见php页面漏洞分析及相关问题解决
PHP和MYSQL制作动态网站开发经验之谈

PHP程序加速探索之代码优化


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 59 ::
收藏到网摘: n/a

掌握了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);
functiondoBenchmark($functionName=null,$arr=null)
{
 reset($arr);
 $benchmark=newBenchmark_Iterate;
 $benchmark->run(MAX_RUN,$functionName,$arr);
 $result=$benchmark->get();
 echo'<br>';
 printf("%sran%dtimeswhereaverageexectime%.5fms",$functionName,$result['iterations'],$result['mean']*1000);
}

functionv1($myArray=null){
 //效率很差的循环
 for($i=0;$i<sizeof($myArray);$i++)
 {
echo'<!--'.$myArray[$i].'-->';
 }
}


functionv2($myArray=null){
 //效率略有提高
 $max=sizeof($myArray);
 for($i=0;$i<$max;$i++)
 {
echo'<!--'.$myArray[$i].'-->';
 }
}

functionv3($myArray=null){
 //最佳效率
 echo"<!--",implode("--><!--",$myArray),"-->";
}

?>
程序输出的结果大概是这样的:

v1ran100timeswhereaverageexectime0.18400ms
v2ran100timeswhereaverageexectime0.15500ms
v3ran100timeswhereaverageexectime0.09100ms

可以看到,函数的执行时间变少,效率上升。

函数v1有个很明显的错误,每一次循环的时间,都需要调用sizeof()函数来计算。函数v2则在循环外把$myArray数组的元素个数存到$max变量中,避免了每次循环都要计算数组的元素个数,所以效率提高了。函数v3的效率最高,利用了现成的函数,避免循环。

这个例子只是给你一个感性的认识,明白什么是相对高效的代码。在实际开发中,我相信会有很多人会迷迷糊糊地写出很多低效率的代码。要把代码写得精炼而高效,恐怕需要时间去锤炼:-)但这是另一个话题了,我们略过不谈。

数据库应用基本上每个PHP程序都会用到,在实际开发中我发现最影响整个系统效率的就是数据库这部份。至于数据库的优化和数据查询语句的优化,在此限于篇幅不详细讨论。读者可参考《MySQL查询优化技术讲座》