PHP程序加速探索[6]--代码优化

原创 2004年08月24日 22:33:00

<2> 加速

代码优化

掌握了PEAR::BenchMark,现在你已经知道如何测试你的代码,知道如何判断你的代码是快是慢,是哪一部份比较慢。那么接下来我要说的就是如何消灭或优化那部份慢的代码。

这一点上我个人最主要的经验只有两点,一是消除错误的或低效的循环;二是优化数据库查询语句。其实还存在一些其它的优化细节,比如“str_replaceereg_replace快”、“echoprint快”等等。这些我暂时都放在一边,稍后我会提到用缓存来对付过于频繁的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程序都会用到,在实际开发中我发现最影响整个系统效率的就是数据库这部份。至于数据库的优化和数据查询语句的优化,在此限于篇幅不详细讨论。你可以参看这两篇文章:

http://www.phpe.net/articles/340.shtml

http://www.phpe.net/articles/323.shtml

及这篇讨论:

     http://club.phpe.net/index.php?s=&act=ST&f=15&t=4783&st=0

   (前面几篇贴子总结不错)

主要是针对MySQL的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

php代码优化方法,加速运行速度的技巧总结

1. 尽量采用大量的PHP内置函数。 2. echo 比 print 快。 3. 不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码? 4. 在执行for循环之前确定最大循环数,不要每循环...
  • u011383596
  • u011383596
  • 2016年10月27日 23:47
  • 1536

SSE指令指令集进行程序加速、DCT的优化处理

1. 什么是SSE 说到SSE,首先要弄清楚的一个概念是SIMD(单指令多数据流,Single Instruction Multiple Data),是一种数据并行技术,能够在一条指令中同时对多个...
  • yangdashi888
  • yangdashi888
  • 2016年11月28日 13:43
  • 1538

DSP程序优化方法

1、选择合适的算法和数据结构     选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密切的关系,一般来说,指针比较灵活...
  • yiyeguzhou100
  • yiyeguzhou100
  • 2014年09月04日 22:58
  • 2407

C++程序提高运行速度的方法

众所周知,因为ACM比赛中对程序运行时间的限制,我们总要想尽一切办法来提高程序的运行速度,比较常见的比如: a = a+b;可以用a+=b;来提高速度, a = a+1;可以用a++;来提高速度等...
  • Runner__1
  • Runner__1
  • 2016年04月16日 17:40
  • 1483

php 性能优化之php 语言级的性能优化一

php语言级的性能优化一
  • wjc19911118
  • wjc19911118
  • 2014年12月05日 02:45
  • 3756

neon实现图像缩放算法(双线性插值法)

neon实现图像缩放算法(双线性插值法)
  • q547569552
  • q547569552
  • 2017年11月01日 10:09
  • 251

浅谈C\C++代码优化中的一些小技巧

转自: 编写C\C++程序快两年,对于代码优化有很深的感触。个人认为,代码优化是一门很深的学问,而作为码农,我们总是在实践中不断更新自己对它的认识和理解。对于这个很大很深的问题,我只是根据自己的...
  • j_study
  • j_study
  • 2014年05月12日 09:14
  • 1539

PHP内核探索:PHP脚本的执行细节

众所周知,计算机的CPU只能执行二进制的机器码,每种CPU都有对应的汇编语言,汇编语言编译器将汇编语言翻译成二进制的机器语言,然后CPU开始执行这些机器码。汇编语言作为机器语言与程序设计者之间的一个层...
  • ab654126
  • ab654126
  • 2014年04月30日 10:53
  • 319

Matlab代码的耗时分析、优化、加速

Profile(分析) 在加速你的matlab程序之前,你需要知道你的代码哪一部分运行最慢。matlab提供个简单的机制,让你能够知道你 的代码的某一部分运行所占用CPU时间。通过在代码段...
  • xiaotianlan
  • xiaotianlan
  • 2016年05月13日 15:08
  • 5634

Hog算法加速的实现代码

前言:Hog算法在图像处理中,应用十分广泛,
  • fengzhizizhizizhizi
  • fengzhizizhizizhizi
  • 2014年05月27日 20:36
  • 1791
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP程序加速探索[6]--代码优化
举报原因:
原因补充:

(最多只允许输入30个字)