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

程序|优化

    掌握了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查询优化技术讲座》

时间: 2024-11-08 20:26:45

PHP程序加速探索之代码优化的相关文章

PHP程序加速探索的代码优化方法

握了PEAR::BenchMark,现在你已经知道如何测试你的代码,知道如何判断你的代码是快是慢,是哪一部份比较慢.那么接下来我要说的就是如何消灭或优化那部份慢的代码. 这一点上我个人最主要的经验只有两点,一是消除错误的或低效的循环:二是优化数据库查询语句.其实还存在一些其它的优化细节,比如"str_replace比ereg_replace快"."echo比print快"等等.这些我暂时都放在一边,稍后我会提到用缓存来对付过于频繁的IO. 下面我们将三个功能相同,但

PHP应用程序加速探索之简介

程序 (一)简介  本文尝试对PHP程序加速的各个方面进行探索,包括必要性以及从不同角度采取的具体措施.希望有助于读者了解PHP程序加速,并应用于实际. (二)是否需要加速? 这个问题听起来有点愚蠢.在这个时代,很少有人会怀疑时间是最宝贵的财富,尤其是在商业市场上.程序执行越快,用户就节约越多的时间,这样你的程序就可以用更少的时间和服务器资源为用户服务,从而产生更多效益. 我想对于大部份人(包括我自己)来说,很多WEB项目都是在很紧张的时间里完成的,通常没有经过缜密的思考和严格的测试.当开始一个

PHP程序加速探索之加速工具软件

程序     接着我们要关注一下PHP加速的另一个领域-缓存工具软件.这类软件都是从优化PHP运行环境来提速的,不需要改变任何代码.我们可以大概地将它们称为"执行码优化/缓存工具",你可以理解为它们用来实现比较底层的优化/缓存.     以下列出目前比较常用的此类工具,具体哪种效果最好,请用自己的服务器环境测试: (一) APC Alternative PHP Cache http://pecl.php.net/package-info.php?package=APC APC运行于Li

PHP程序加速探索之缓存输出

程序|缓存 内容缓存输出 PEAR cache 接下来我们开始探索更常用的缓存技术,这也是本文的重点部份.首先我们使用PEAR中的cache包.PEAR可以将内容缓存于文件,数据库或者内存中,我们以文件为例. 下面是一个没有使用缓存的PHP小程序: pear_content_cache1.php <?php echo "这是内容.<P>"; echo "当前时间是" . date('M-d-Y H:i:s A', time()) . "&

PHP程序加速探索之压缩输出gzip

程序|压缩     利用Apache中的mod_gzip模块,我们可以利用gzip的压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端的浏览器.如果是纯文本的内容,效果非常明显,大约可以压缩到原来的30%-40%,使用户的浏览速度大大加快. Gzip需要客户端浏览器支持,目前大部份浏览器都支持gzip,如IE,Netscape,Mozilla等,所以这种方法值得一试.我们可以利用PHP中的预定义变量$_SERVER['HTTP_ACCEPT_ENCODING']来判断客户端浏览

PHP程序加速探索之脚本执行速度测试

程序|脚本|速度|执行     前面有提到,只有找到影响速度的代码,我们才有可能进行优化.PEAR的benchmark包中的Benchmark_Timer类和Benchmark_Iterate类,可以用来很方便地测试脚本执行的速度.(关于PEAR的安装与配置请自行查看相关资料) . 首先用Benchmark_Iterate类来测试程序中某个函数或类的某个方法的执行时间. benchmark1.php require_once('Benchmark/Iterate.php'); $benchmar

PHP程序加速探索之服务器负载测试

程序|服务器 服务器负载太大而影响程序效率也是很常见的,我们需要对此进行测试.这里我以目前最常用的Apache服务器为例.  Apache服务器自带有一个叫AB(ApacheBench)的工具,在bin目录下.使用这个轻巧的工具我们可以对服务器进行负载测试,看看在重负荷之下服务器的表现如何.ApacheBench 可以针对某个特定的 URL 仿真出连续的联机请求,同时还可以仿真出同时间点数个相同的联机请求,因此利用 ApacheBench 可帮助我们在网站开发期间仿真实际上线可能的情况,利用仿真

PHP开发程序加速运行探索之慢代码优化方法

把握了PEAR::BenchMark,现在你已经知道如何测试你的代码,知道如何判定你的代码是快是慢,是哪一部份比较慢.那么接下来我要说的就是如何消灭或优化那部份慢的代码. 这一点上我个人最主要的经验只有两点,一是消除错误的或低效的循环:二是优化数据库查询语句.其实还存在一些其它的优化细节,比如"str_replace比ereg_replace快"."echo比print快"等等.这些我暂时都放在一边,稍后我会提到用缓存来对付过于频繁的IO. 下面我们将三个功能相同,

阿里云数据库CloudDBA的自动运维与智能优化探索

数据库诊断优化是提高数据库性能和稳定性的关键技术之一.过去几年阿里巴巴集团数据库规模急剧增长并且业务变化越来越快,传统DBA人工加工具的诊断和优化方法在规模如此之大,业务场景如此复杂的今天面临极大的挑战.于是,自动化.智能化的运维方法和工具的需求就尤为迫切. 阿里巴巴技术团队在这方面不断摸索与尝试,并推出了CloudDBA智能化运维产品,将技术专家的运维智慧和经验凝聚成产品的规则引擎,并利用机器学习学习算法为产品导入智能化模块,从而将大量的数据库的诊断分析和优化工作都自动完成,不仅将DBA从繁冗