以掌握使用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

$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类调试的代码

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程序substrs函数截取GBK编码的字符平均时间在0.0014s-0.0015s之间,纵坐标表示执行的时间,横坐标表示执行的次数,图表中mean表示平均执行时间,注s表示秒

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

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

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

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

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

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

四,性能比较测试总结

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

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

chstr php,PHPWind与Discuz截取字符函数substrs与cutstr性能比较相关推荐

  1. Python 如何截取字符函数

    如何截取字符函数 在工作中我们经常会遇到某种情况需要截取字符串中某个特定标签之间的内容(爬虫可能用到的较多),适用于很多情况例如字符串形式的xml报文.json格式的字符串以及其它类型的字符串. 因为 ...

  2. Python 怎么截取字符函数

    这篇文章主要介绍了Python 如何截取字符函数,具有很好的参考价值,希望对大家有所帮助. 如何截取字符函数 在工作中我们经常会遇到某种情况需要截取字符串中某个特定标签之间的内容(爬虫可能用到的较多) ...

  3. mysql中的substring()截取字符函数

    substring(参数1,参数2,参数3) 其中三个参数分别表示:参数1表示需要截取的字符串,参数2表示从字符串的那个位置开始截取(字符串下标从1开始),参数3表示要截取多少位,如果不写,表示截取从 ...

  4. Python 截取字符函数

    在工作中我们经常会遇到某种情况需要截取字符串中某个特定标签之间的内容(爬虫可能用到的较多),适用于很多情况例如字符串形式的xml报文.json格式的字符串以及其它类型的字符串.因为我总结了有关字符串截 ...

  5. Excel怎样从一串字符中的某个指定“字符”前后截取字符及截取字符串常用函数

    原始字符串: 品种在源系统主键(id) 截取前面的    (品种在源系统主键): =LEFT(B3,FIND("(",B3)-1) 截取后面的    (id): =LEFT(RIG ...

  6. Excel怎样从一串字符中的某个指定“字符”前后截取字符及截取字符串常用函数...

    怎么样可以从一串字符中的某个指定位置的前或后截取指定个数的字符. 如:12345.6789,我要截取小数点前(或后)的3个字符.怎么样操作, 另外,怎么样从右边截取字符,就是和left()函数相反的那 ...

  7. c语言计算字符串的函数是什么,字符函数

    字符函数(character function)是处理字符型数据的函数,其自变量或函数值中至少有一个是字符型数据. 中文名 字符函数 外文名 character function 应用领域 计算机等涉 ...

  8. 数据库字符mysql_MySQL数据库之字符函数详解

    MySQL数据库中的函数根据功能可以划分为字符函数.数值运算符与函数.比较运算符与函数.日期时间函数.信息函数.聚合函数.加密函数以及自定义函数等. 1.CONCAT() CONCAT()函数用于字符 ...

  9. Oracle可以处理LOB字段的常用字符函数

    以前处理LOB字段都是使用DBMS_LOB包,最近看了文档才发现,原来很多常用的字符函数都是支持LOB字段的. 建立一个测试表: SQL> CREATE TABLE T_LOB (ID NUMB ...

最新文章

  1. ASP.NET中WebForm组件CheckBoxList编程
  2. MYSQL安装出现could not start the service mysql error:0处理
  3. html 元素的属性
  4. html5专著,参考文献专著
  5. 去快捷方式小箭头_电脑桌面如何快速去掉快捷方式小箭头
  6. twisted系列教程十四— pre-fireed deferred
  7. VirtualBox+CentOS6.6安装增强功能包 - Building the main Guest Additions module [失败]
  8. 你必须了解的基础的 Linux 网络命令
  9. mysql+workbench+6.1+下载,MySQL Workbench 6.3.1 发布下载
  10. API 的5 大身份验证安全隐患
  11. [Unity3D]自制UnityForAndroid二维码扫描插件
  12. 最近四款非常火的广告设计软件,学会大有作为
  13. 詹姆斯titan_再见,詹姆斯!
  14. 5miles:这家电商公司,想做推动区块链技术落地的标杆
  15. linux bluefish制作网页,基于Linux文本模式的网页编辑器Bluefish
  16. puzzle(0131)《迷宫》
  17. 华为P30销量破千万有多少含金量?
  18. 主宰互联网的超强10大算法!
  19. 迅雷百度网盘不能下载资源 办法总比困难多
  20. 下载自媒体内容素材,帮你快速创造内容

热门文章

  1. Python遍历文件夹获取文件名并写入excel
  2. 【less-6】sqli-labs靶场第六关(类似less-5)
  3. Java中BigDecimal类型的加减乘除及大小比对
  4. Eclipse编辑python时的快捷键
  5. 2019-2020大一下学期总结和暑假安排
  6. Markdown_合并表格中的单元格
  7. 算法不会,尚能饭否之排序——插入排序法(用链表实现)
  8. 16个常用的Linux服务器监控命令
  9. Vue cli项目开启Gzip
  10. jqueryForm 异步上传图片文件