手机版

PHPWind和Discuz截取字符函数子串和cutstr的性能比较

时间:2021-10-12 来源:互联网 编辑:宝哥软件园 浏览:

掌握使用Benchmark_Iterate类工具的方法。目录一,什么是PEAR和Benchmark二,性能比较代码准备与调试三,性能比较测试结果四,性能比较测试总结五,下载一个带性能比较的源代码,什么是PEAR和Benchmark?请参考PHP性能优化系列第二阶段PHP性能优化工具。基准类调试执行时间,第一阶段PHP性能优化准备图解PEAR安装二。性能对比代码准备和调试测试环境描述操作系统:Windows xp Service Pack 3 PHP版本:PHP版本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。复制代码如下:函数substrs ($ content,$ length,$ add=' y '){ if(strlen($ content)$ length){ if($ globals[' db _ charset ']!=' utf-8 '){ $ retstr=' ';for($ I=0;$ I $ length-2;$i ) { $retstr。=订单($content[$i]) 127?$content[$i]。$ content[$ I]: $ content[$ I];}返回$retstr。($add=='Y '?' .': '');}返回utf8_trim(substr($content,0,$length))。($add=='Y '?' .': '');}返回$ content}函数utf8 _ trim($ str){ $ hex=' ';$ len=strlen($ str)-1;for($ I=$ len;$ I=0;$ I-=1){ $ ch=order($ str[$ I]);$hex。=' $ chif(($ ch 128)==0 | |($ ch 192)==192){ return substr($ str,0,$ I);} }返回$str。$ hex}函数cutstr($string,$length,$dot=' . '){ global $ charsetif(strlen($ string)=$ length){ return $ string;} $string=str_replace(array(“”、“”、“”、“”)、array(“”、“”、“”)、$ string);$ strcut=if(strtolow($ charset)=' utf-8 '){ $ n=$ TN=$ NOC=0;while($ n strlen($ string)){ $ t=order($ string[$ n]);if($ t==9 | | $ t==10 | |(32=$ t $ t=126)){ $ TN=1;$ n;$ noc} else if(194=$ t $ t=223){ $ TN=2;$ n=2;$ NOC=2;} else if(224=$ t $ t=239){ $ TN=3;$ n=3;$ NOC=2;} else if(240=$ t $ t=247){ $ TN=4;$ n=4;$ NOC=2;} else if(248=$ t $ t=251){ $ TN=5;$ n=5;$ NOC=2;} else if($ t==252 | | $ t==253){ $ TN=6;$ n=6;$ NOC=2;} else { $ n;} if($ NOC=$ length){ break;} } if($ NOC $ length){ $ n-=$ TN;} $ str ut=substr($ string,0,$ n);} else { for($ I=0;$ i $长度;$i ) { $strcut。=order($ string[$ I])127?$string[$i]。$ string[$ I]: $ string[$ I];} } $strcut=str_replace(array(“”、“”、“”、“”)、array(“”、“”、“”)、$ str cut);返回$ 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程序子串函数当截取的字符编码为GBK PHPWind程序substrs函数当截取字符编码为GBK的情况时。

图:PHPWind程序substrs函数截取GBK编码字符的平均时间为0.0014s-0.0015s,纵坐标表示执行时间,横坐标表示执行次数,图中均值表示平均执行时间,备注s表示秒2,丢弃!截取编码为GBK Discuz!程序cutstr函数当截取字符编码为GBK的情况的字符时的程序cutstr函数。

插图:Discuz!cutstr函数截取GBK编码字符的平均时间在0.0016 s到0.0018s ^ 3之间。当截获的字符被PHPWind程序PHPWind程序substrs函数当截取字符编码为UTF-8的情况的substrs函数编码为UTF-8时。

图:PHPWind程序substrs函数截取UTF-8编码字符的平均时间为0.001s-0.0012s 4、丢弃!当截取的字符编码为UTF-8 Discuz!程序cutstr函数当截取字符编码为UTF-8的情况时,编程cutstr函数。

插图:Discuz!程序cutstr函数截取UTF-8编码字符的平均时间在0.0044s-0.0052s 4之间。性能比较测试总结如上所述,使用PEAR的Benchmark_Iterate类比较了两个拦截字符函数的性能。在实际的代码开发过程中,为了保证代码的效率和性能,我们可以采用同样的方法来分析功能的性能或问题,这是非常有用的!本文以PHPWind和Discuz两个社区论坛产品为例,通过比较截取字符函数substrs和cutstr的性能,来谈谈PEAR Benchmark_Iterate类在实际开发中的应用。请继续关注下一期的PHP性能优化系列。

版权声明:PHPWind和Discuz截取字符函数子串和cutstr的性能比较是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。