手机
当前位置:查字典教程网 >编程开发 >php教程 >PHPWind与Discuz截取字符函数substrs与cutstr性能比较
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
摘要:以掌握使用Benchmark_Iterate类工具的方法。目录一,什么是PEAR与Benchmark二,性能比较代码准备与调试三,性能比较测...

以掌握使用Benchmark_Iterate类工具的方法。

目录

一,什么是PEAR与Benchmark

二,性能比较代码准备与调试

三,性能比较测试结果

四,性能比较测试总结

五,附性能比较源代码下载

一,什么是PEAR与Benchmark

请参考PHP性能优化系列

第二期 PHP性能优化工具篇Benchmark类调试执行时间

第一期 PHP性能优化准备篇图解PEAR安装

二,性能比较代码准备与调试

测试环境说明

操作系统:Windows xp Service Pack 3

PHP版本:PHP Version 5.2.11

Apache版本:Apache 2.0 Handler

第一步,下载phpwind与discuz!程序源代码

1,下载 phpwind v7.5sp3 论坛版 安装包:简体 GBK

2,下载 Discuz! 7.2_FULL(含UCenter) 简体GBK

第二步,分别获取两个程序的截取字符函数substrs()和cutstr(),其中PHPWind截取字符函数substrs()由两个函数组成,分别是substrs与utf8_trim函数。

复制代码 代码如下:

function substrs($content,$length,$add='Y'){

if (strlen($content)>$length) {

if ($GLOBALS['db_charset']!='utf-8') {

$retstr = '';

for ($i=0;$i<$length-2;$i++) {

$retstr .= ord($content[$i]) > 127 ? $content[$i].$content[++$i] : $content[$i];

}

return $retstr.($add=='Y' ? ' ..' : '');

}

return utf8_trim(substr($content,0,$length)).($add=='Y' ? ' ..' : '');

}

return $content;

}

function utf8_trim($str) {

$hex = '';

$len = strlen($str)-1;

for ($i=$len;$i>=0;$i-=1) {

$ch = ord($str[$i]);

$hex .= " $ch";

if (($ch & 128)==0 || ($ch & 192)==192) {

return substr($str,0,$i);

}

}

return $str.$hex;

}

function cutstr($string, $length, $dot = ' ...') {

global $charset;

if(strlen($string) <= $length) {

return $string;

}

$string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);

$strcut = '';

if(strtolower($charset) == 'utf-8') {

$n = $tn = $noc = 0;

while($n < strlen($string)) {

$t = ord($string[$n]);

if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {

$tn = 1; $n++; $noc++;

} elseif(194 <= $t && $t <= 223) {

$tn = 2; $n += 2; $noc += 2;

} elseif(224 <= $t && $t <= 239) {

$tn = 3; $n += 3; $noc += 2;

} elseif(240 <= $t && $t <= 247) {

$tn = 4; $n += 4; $noc += 2;

} elseif(248 <= $t && $t <= 251) {

$tn = 5; $n += 5; $noc += 2;

} elseif($t == 252 || $t == 253) {

$tn = 6; $n += 6; $noc += 2;

} else {

$n++;

}

if($noc >= $length) {

break;

}

}

if($noc > $length) {

$n -= $tn;

}

$strcut = substr($string, 0, $n);

} else {

for($i = 0; $i < $length; $i++) {

$strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];

}

}

$strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $strcut);

return $strcut.$dot;

}

第三步,编写使用PEAR Benchmark_Iterate类调试的代码

复制代码 代码如下:

<?php

require_once "Benchmark/Iterate.php";

$bench = new Benchmark_Iterate;

$charset = $GLOBALS['db_charset'] = 'gbk';//utf-8

$content = "今年春晚,我特地关注了赵本山的新小品《捐助》,这篇小品对弱势群体的不尊重并无改变,小品讲的是赵本山与其弟子扮演两个捐助者...";

/*phpwind*/

$bench->run(50,"substrs",$content,30);

/*discuz*/

//$bench->run(50,"cutstr",$content,30);

$result = $bench->get();

?>

分别切换substrs和cutstr两个函数并且调用50次获取两个函数执行的平均时间。

三,性能比较测试结果

1,PHPWind程序substrs函数当截取字符编码为GBK的情况

PHPWind与Discuz截取字符函数substrs与cutstr性能比较1

图解:PHPWind程序substrs函数截取GBK编码的字符平均时间在0.0014s-0.0015s之间,纵坐标表示执行的时间,横坐标表示执行的次数,图表中mean表示平均执行时间,注s表示秒

2,Discuz!程序cutstr函数当截取字符编码为GBK的情况

PHPWind与Discuz截取字符函数substrs与cutstr性能比较2

图解:Discuz!程序cutstr函数截取GBK编码的字符平均时间在0.0016s-0.0018s之间

3,PHPWind程序substrs函数当截取字符编码为UTF-8的情况

PHPWind与Discuz截取字符函数substrs与cutstr性能比较3

图解:PHPWind程序substrs函数截取UTF-8编码的字符平均时间在0.001s-0.0012s之间

4,Discuz!程序cutstr函数当截取字符编码为UTF-8的情况

PHPWind与Discuz截取字符函数substrs与cutstr性能比较4

图解:Discuz!程序cutstr函数截取UTF-8编码的字符平均时间在0.0044s-0.0052s之间

四,性能比较测试总结

如上使用PEAR的Benchmark_Iterate类比较了两个截取字符函数的执行性能,在实际的代码开发过程中,为了保证代码的效率与性能,我们可以采取同样的方法来分析函数的执行性能或问题,这个非常有用!

本文通过比较PHPWind与Discuz两个社区论坛产品的截取字符函数substrs与cutstr的执行性能情况为例,谈谈PEAR Benchmark_Iterate类在实际开发中的应用,请继续关注下期的PHP性能优化系列。

【PHPWind与Discuz截取字符函数substrs与cutstr性能比较】相关文章:

php筛选不存在的图片资源

利用Yahoo! Search API开发自已的搜索引擎-php版

如何使用PHP中的字符串函数

php按单词截取字符串的方法

PHP生成指定随机字符串的简单实现方法

PHP5对象体系

PHP解密Unicode及Escape加密字符串

php+oracle 分页类

PHP中的traits简单使用实例

PHP中的一些常用函数收集

精品推荐
分类导航