


PHPWind and Discuz intercept character function substrs and cutstr performance comparison_PHP tutorial
To master the method of using Benchmark_Iterate class tools.
Table of Contents
1. What is PEAR and Benchmark
2. Performance comparison code preparation and debugging
3. Performance comparison test results
4. Performance comparison test summary
5 , with performance comparison source code download
1. What is PEAR and Benchmark
Please refer to the PHP performance optimization series
The second issue of PHP performance optimization tools chapter Benchmark class debugging execution time
Illustrated PEAR installation in the first issue of PHP performance optimization preparation
Second, performance comparison code preparation and debugging
Test environment description
Operating system: Windows xp Service Pack 3
PHP Version: PHP Version 5.2.11
Apache version: Apache 2.0 Handler
First step, download phpwind and discuz! program source code
1, download phpwind v7.5sp3 forum version installation package: Simplified GBK
2, download Discuz! 7.2_FULL (including UCenter) Simplified GBK
The second step is to obtain the character interception functions substrs() and cutstr() of the two programs, among which PHPWind intercepts the character function substrs () consists of two functions, namely substrs and utf8_trim functions.
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;
}
The third step is to write debugging code using the PEAR Benchmark_Iterate class
require_once "Benchmark/Iterate.php";
$bench = new Benchmark_Iterate;
$ charset = $GLOBALS['db_charset'] = 'gbk';//utf-8
$content = "This year's Spring Festival Gala, I paid special attention to Zhao Benshan's new sketch "Donation". This sketch disrespected the disadvantaged groups. There is no change, the skit is about Zhao Benshan and his disciples playing two donors...";
/*phpwind*/
$bench->run(50,"substrs",$content ,30);
/*discuz*/
//$bench->run(50,"cutstr",$content,30);
$result = $bench-> get();
?>
Switch the substrs and cutstr functions respectively and call them 50 times to obtain the average execution time of the two functions.
3. Performance comparison test results
1. When the substrs function of the PHPWind program intercepts the character encoding as GBK

Illustration: The average time for the PHPWind program substrs function to intercept GBK-encoded characters is between 0.0014s-0.0015s. The ordinate represents the execution time, and the abscissa represents the number of executions. In the chart mean represents the average execution time, note s represents seconds
2, Discuz! program cutstr function when intercepting character encoding is GBK

Illustration: The average time taken by the Discuz! program cutstr function to intercept GBK-encoded characters is between 0.0016s-0.0018s
3. The PHPWind program substrs function intercepts character encoding. In the case of UTF-8
Illustration: The average time for the PHPWind program substrs function to intercept UTF-8 encoded characters is between 0.001s-0.0012s
4, Discuz! program cutstr function when intercepting Character encoding is UTF-8
Illustration: The average time taken by Discuz! program cutstr function to intercept UTF-8 encoded characters is between 0.0044s-0.0052s
Fourth, performance comparison test summary
As above, the execution performance of the two interception character functions was compared using the Benchmark_Iterate class of PEAR. In actual During the code development process, in order to ensure the efficiency and performance of the code, we can use the same method to analyze the execution performance or problems of the function. This is very useful!
This article takes as an example a comparison of the execution performance of the interception character functions substrs and cutstr of two community forum products, PHPWind and Discuz, to talk about the application of the PEAR Benchmark_Iterate class in actual development. Please continue to pay attention to the PHP performance in the next issue. Optimized series.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Performance comparison of different Java frameworks

Complete collection of excel function formulas

PHP array key value flipping: Comparative performance analysis of different methods

How to optimize the performance of multi-threaded programs in C++?

C++ Function Exception Advanced: Customized Error Handling

What is Bitget Launchpool? How to use Bitget Launchpool?

Performance comparison of C++ with other languages

Things to note when Golang functions receive map parameters
