测试之前我们先来理解Benchmark。

直接下载:http://pear.php.net/package/Benchmark/download

Benchmark工具类包共有三个文件,分别是Timer.php、Iterate.php和Profiler.php,三个工具类功能相同,只是侧重点不同,都是用于调试代码获取程序的实行韶光。

php代码测试PHP 代码优化测试Benchmark数据测试 HTML

1,Benchmark_Timer类事理与通过microtime函数获取微秒韶光再比较前后两个韶光值的差相同。

2,Benchmark_Iterate类用于调试函数的均匀实行韶光。

3,Benchmark_Profiler类用于统计代码和函数的实行韶光以及函数的调用次数。

我们用它来测试实行结果,利用它须要安装pear

1) $row['id'] =0比 $row[id]=0 快,次数越大越明显/生产环境(Linux)下测试1个数量级;

首先来测试直接写id的情形:

测试结果:

而当我们把$arr[id] = 0; 改为

测试结果为:

可以看到,提升速率比较明显,因此,我们要规范数组的字段,不能写有风险的代码,$arr[id]这样子写有很大的风险。

2) 递增(递减)一个预预定义的局部变量要比递增(递减)一个未定义的局部变量快;差别较大

还是上述的代码,循环部分我们改为:

实行耗时为:

而我们改为:

实行耗时:

耗时缩减挺多

3)在可行的情形下,避免利用正则表达式,str_replace 函数比 preg_replace,差别还是很明显的

首先来看利用正则的情形下:

耗时:

而利用:

耗时会减少挺多:

同样我们可以延伸出,只管即便利用php的函数去完成功能,那些函数底层c都是经由优化的,实行效率比较高。
即:只管即便采取PHP内置函数,且选择效率高的函数

4)在有必要的时候使利用引用(&),测试差别较大,靠近1个数量级

引用的话,就不用像正常通报变量那样,复制多一个变量, 而是直策应用地址即可。

我们先不用引用:

耗时:

而当我们在循环中改为:

耗时为:

韶光上缩小了很多。

5 ) 判断字符串长度时,可用isset($str{15})代替strlen($str) < 15;由于isset()作为一种措辞构造,而strlen()是函数,措辞构造快于函数;

利用strlen($str)函数来判断,代码如下:

实行耗时:

而当我们利用

判断,将会加快很多,实行耗时:

6 ) $_SERVER['DOCUMENT_ROOT']代替str_replace('//','/',dirname(__FILE__) .'/') ; wamp测试无太大差别/Linux生产环境测试性能提升 500% (5倍)

首先我们先用 $path = str_replace('//','/',dirname(__FILE__) .'/'); 测试:

实行耗时:

当改为:

实行耗时:

险些不在毫秒级别内。
耗时少很多。

7 ) 获取Unix韶光戳时用$_SERVER['REQUEST_TIME'] 代替time(); 测试性能提升很多

首先我们利用time() 来获取:

实行耗时:

而改为:

的时候,实行耗时减少很多:

险些不在毫秒级别内

实在还有很多其他的各种优化小细节,例如:

foreach函数,没有用到键的时候,就不要加键。

include 文件时只管即便利用绝对路径,由于它避免了 PHP 去 include_path 里查找文件的速 度,解析操作系统路径所需的韶光会更少。
【测试差别实在不明显】

用单引号(’’)代替双引号(””),单引号为强类型,将个中的以是字符都认作字符,而双引号的为弱类型,它会检测个中是否存在变量 【测试差别不大,但是用双引号有风险】

Apache 处理 PHP 脚本的速率要比静态页面慢 2-10 倍,因此只管即便采取多的静态页面,少的脚本;PHP程序利用文件缓存性能会倍增【不用测试我们也知道,测试速率快很多】;

一样平常不建议启用auto_start(session.auto_start:是否自动启用) ,由于创建Session须要花费系统资源,我们常日只会在须要用到Sesson时,才会利用session_start函数来开启Session功能。

优化无止境.............................................................