Last active
May 19, 2020 04:22
-
-
Save KEINOS/61b4d1bec18696713a726079592dc919 to your computer and use it in GitHub Desktop.
[Bench] Which is faster, preg_match() or ctype_alnum() ?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Benchmark between preg_match() and ctype_alnum() | |
* | |
* $ phpbench run --retry-threshold=1 --revs=1000000 \ | |
* --iterations=10 --report=compare --report=aggregate \ | |
* ./PregMatchVsCtypeAlnumBench.php | |
* | |
* Requirement | |
* $ composer require phpbench/phpbench @dev --dev | |
* | |
* @BeforeMethods({"setUp"}) | |
*/ | |
class PregMatchVsCtypeAlnumBench | |
{ | |
public function setUp() | |
{ | |
// List of characters available | |
$this->list_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; | |
$this->pattern = '/[^A-Za-z0-9]/'; | |
// Generate string to test | |
$len_str = 64; | |
$len_list_chars = strlen($this->list_chars); | |
$str_random = ''; | |
for ($i = 0; $i < $len_str; $i++) { | |
$pos = \mt_rand() % $len_list_chars; | |
$str_random .= $this->list_chars[$pos]; | |
} | |
// Set test string | |
$this->str_random = $str_random; | |
} | |
public function benchCtypeAlnum() | |
{ | |
$pattern = $this->pattern; | |
$subject = $this->str_random; | |
if (ctype_alnum($subject)) { | |
return true; | |
} | |
return false; | |
} | |
public function benchPregMatch() | |
{ | |
$pattern = $this->pattern; | |
$subject = $this->str_random; | |
if (preg_match($pattern, $subject) === 0) { | |
return true; | |
} | |
return false; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"require-dev": { | |
"phpbench/phpbench": "@dev" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ # ------------------------------------------------------------------------------- | |
$ # Bench result (Local run, macOS Mojave, PHP 7.1.33) | |
$ # ------------------------------------------------------------------------------- | |
$ # | |
$ ./vendor/bin/phpbench run --retry-threshold=1 --revs=1000000 --iterations=10 --report=compare --report=aggregate ./PregMatchVsCtypeAlnumBench.php | |
PhpBench @git_tag@. Running benchmarks. | |
\PregMatchVsCtypeAlnumBench | |
benchCtypeAlnum.........................R1 I9 [μ Mo]/r: 0.179 0.178 (μs) [μSD μRSD]/r: 0.001μs 0.38% | |
benchPregMatch..........................R1 I0 [μ Mo]/r: 1.693 1.693 (μs) [μSD μRSD]/r: 0.008μs 0.45% | |
2 subjects, 20 iterations, 2,000,000 revs, 0 rejects, 0 failures, 0 warnings | |
(best [mean mode] worst) = 0.178 [0.936 0.936] 0.179 (μs) | |
⅀T: 18.715μs μSD/r 0.004μs μRSD/r: 0.420% | |
+----------------------------+-----------------+-----+---------+-----------------------------------------------------+ | |
| benchmark | subject | set | revs | suite:1343c471444b2eadced4437583d78a4640912081:mean | | |
+----------------------------+-----------------+-----+---------+-----------------------------------------------------+ | |
| PregMatchVsCtypeAlnumBench | benchCtypeAlnum | 0 | 1000000 | 0.179μs | | |
| PregMatchVsCtypeAlnumBench | benchPregMatch | 0 | 1000000 | 1.693μs | | |
+----------------------------+-----------------+-----+---------+-----------------------------------------------------+ | |
suite: 1343c471444b2eadced4437583d78a4640912081, date: 2020-05-19, stime: 03:52:51 | |
+----------------------------+-----------------+-----+---------+-----+----------+---------+---------+---------+---------+---------+--------+-------+ | |
| benchmark | subject | set | revs | its | mem_peak | best | mean | mode | worst | stdev | rstdev | diff | | |
+----------------------------+-----------------+-----+---------+-----+----------+---------+---------+---------+---------+---------+--------+-------+ | |
| PregMatchVsCtypeAlnumBench | benchCtypeAlnum | 0 | 1000000 | 10 | 422,816b | 0.178μs | 0.179μs | 0.178μs | 0.179μs | 0.001μs | 0.38% | 1.00x | | |
| PregMatchVsCtypeAlnumBench | benchPregMatch | 0 | 1000000 | 10 | 422,816b | 1.681μs | 1.693μs | 1.693μs | 1.709μs | 0.008μs | 0.45% | 9.48x | | |
+----------------------------+-----------------+-----+---------+-----+----------+---------+---------+---------+---------+---------+--------+-------+ | |
$ php -v | head -1 | |
PHP 7.1.33 (cli) (built: Jan 26 2020 22:52:32) ( NTS ) | |
$ composer --version | |
Composer version 1.9.3 2020-02-04 12:58:49 | |
$ composer show 2>&1 | grep phpbench | |
phpbench/container 1.2 Simple, configurable, service container. | |
phpbench/dom 0.2.0 DOM wrapper to simplify working with the PHP DOM implementation | |
phpbench/phpbench 0.16.10 PHP Benchmarking Framework | |
$ sw_vers | |
ProductName: Mac OS X | |
ProductVersion: 10.14.6 | |
BuildVersion: 18G4032 | |
$ # Version of compiled modules installed | |
$ php -r 'foreach (get_loaded_extensions() as $extension) echo "$extension: " . phpversion($extension) . PHP_EOL;' | |
Core: 7.1.33 | |
date: 7.1.33 | |
libxml: 7.1.33 | |
openssl: 7.1.33 | |
pcre: 7.1.33 | |
sqlite3: 7.1.33 | |
zlib: 7.1.33 | |
bcmath: 7.1.33 | |
bz2: 7.1.33 | |
calendar: 7.1.33 | |
ctype: 7.1.33 | |
curl: 7.1.33 | |
dba: 7.1.33 | |
dom: 20031129 | |
hash: 1.0 | |
fileinfo: 1.0.5 | |
filter: 7.1.33 | |
ftp: 7.1.33 | |
gd: 7.1.33 | |
SPL: 7.1.33 | |
iconv: 7.1.33 | |
json: 1.5.0 | |
ldap: 7.1.33 | |
mbstring: 7.1.33 | |
session: 7.1.33 | |
standard: 7.1.33 | |
mysqlnd: mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $ | |
PDO: 7.1.33 | |
pdo_mysql: 7.1.33 | |
pdo_pgsql: 7.1.33 | |
pdo_sqlite: 7.1.33 | |
pgsql: 7.1.33 | |
Phar: 2.0.2 | |
posix: 7.1.33 | |
readline: 7.1.33 | |
Reflection: 7.1.33 | |
mysqli: 7.1.33 | |
shmop: 7.1.33 | |
SimpleXML: 7.1.33 | |
snmp: 0.1 | |
soap: 7.1.33 | |
sockets: 7.1.33 | |
exif: 7.1.33 | |
sysvmsg: 7.1.33 | |
sysvsem: 7.1.33 | |
sysvshm: 7.1.33 | |
tidy: 7.1.33 | |
tokenizer: 7.1.33 | |
wddx: 7.1.33 | |
xml: 7.1.33 | |
xmlreader: 7.1.33 | |
xmlrpc: 7.1.33 | |
xmlwriter: 7.1.33 | |
xsl: 7.1.33 | |
zip: 1.13.5 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/app # # ------------------------------------------------------------------------------- | |
/app # # Bench result (Docker, php:7.1.33-cli-alpine) | |
/app # # ------------------------------------------------------------------------------- | |
/app # | |
/app # ./vendor/bin/phpbench run --retry-threshold=1 --revs=1000000 --iterations=10 --report=compare --report=aggregate ./PregMatchVsCtypeAlnumBench.php | |
PhpBench @git_tag@. Running benchmarks. | |
\PregMatchVsCtypeAlnumBench | |
benchCtypeAlnum.........................R1 I8 [μ Mo]/r: 0.796 0.796 (μs) [μSD μRSD]/r: 0.004μs 0.51% | |
benchPregMatch..........................R1 I7 [μ Mo]/r: 0.425 0.426 (μs) [μSD μRSD]/r: 0.002μs 0.56% | |
2 subjects, 20 iterations, 2,000,000 revs, 0 rejects, 0 failures, 0 warnings | |
(best [mean mode] worst) = 0.421 [0.611 0.611] 0.429 (μs) | |
⅀T: 12.211μs μSD/r 0.003μs μRSD/r: 0.538% | |
+----------------------------+-----------------+-----+---------+-----------------------------------------------------+ | |
| benchmark | subject | set | revs | suite:1343c47122614c102116bf78b2ecc38234e3b0f3:mean | | |
+----------------------------+-----------------+-----+---------+-----------------------------------------------------+ | |
| PregMatchVsCtypeAlnumBench | benchCtypeAlnum | 0 | 1000000 | 0.796μs | | |
| PregMatchVsCtypeAlnumBench | benchPregMatch | 0 | 1000000 | 0.425μs | | |
+----------------------------+-----------------+-----+---------+-----------------------------------------------------+ | |
suite: 1343c47122614c102116bf78b2ecc38234e3b0f3, date: 2020-05-19, stime: 03:35:16 | |
+----------------------------+-----------------+-----+---------+-----+----------+---------+---------+---------+---------+---------+--------+-------+ | |
| benchmark | subject | set | revs | its | mem_peak | best | mean | mode | worst | stdev | rstdev | diff | | |
+----------------------------+-----------------+-----+---------+-----+----------+---------+---------+---------+---------+---------+--------+-------+ | |
| PregMatchVsCtypeAlnumBench | benchCtypeAlnum | 0 | 1000000 | 10 | 414,896b | 0.790μs | 0.796μs | 0.796μs | 0.803μs | 0.004μs | 0.51% | 1.87x | | |
| PregMatchVsCtypeAlnumBench | benchPregMatch | 0 | 1000000 | 10 | 414,896b | 0.421μs | 0.425μs | 0.426μs | 0.429μs | 0.002μs | 0.56% | 1.00x | | |
+----------------------------+-----------------+-----+---------+-----+----------+---------+---------+---------+---------+---------+--------+-------+ | |
/app # php -v | head -1 | |
PHP 7.1.33 (cli) (built: Oct 25 2019 07:17:47) ( NTS ) | |
/app # composer --version | |
Composer version 1.10.6 2020-05-06 10:28:10 | |
/app # composer show 2>&1 | grep phpbench | |
phpbench/container 1.2 Simple, configurable, service container. | |
phpbench/dom 0.2.0 DOM wrapper to simplify working with the PHP DOM implementation | |
phpbench/phpbench 0.16.10 PHP Benchmarking Framework | |
/app # cat /etc/os-release | grep PRETTY_NAME | |
PRETTY_NAME="Alpine Linux v3.10" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/app # # ------------------------------------------------------------------------------- | |
/app # # Bench result (Docker, php:7.4.5-cli-alpine) | |
/app # # ------------------------------------------------------------------------------- | |
/app # | |
/app # ./vendor/bin/phpbench run --retry-threshold=1 --revs=1000000 --iterations=10 --report=compare --report=aggregate ./PregMatchVsCtypeAlnumBench.php | |
PhpBench @git_tag@. Running benchmarks. | |
\PregMatchVsCtypeAlnumBench | |
benchCtypeAlnum.........................R1 I7 [μ Mo]/r: 0.662 0.660 (μs) [μSD μRSD]/r: 0.003μs 0.50% | |
benchPregMatch..........................R2 I7 [μ Mo]/r: 0.215 0.216 (μs) [μSD μRSD]/r: 0.001μs 0.50% | |
2 subjects, 20 iterations, 2,000,000 revs, 0 rejects, 0 failures, 0 warnings | |
(best [mean mode] worst) = 0.214 [0.438 0.438] 0.217 (μs) | |
⅀T: 8.770μs μSD/r 0.002μs μRSD/r: 0.499% | |
+----------------------------+-----------------+-----+---------+-----------------------------------------------------+ | |
| benchmark | subject | set | revs | suite:1343c47e20292d83fe245094977e91decfee3831:mean | | |
+----------------------------+-----------------+-----+---------+-----------------------------------------------------+ | |
| PregMatchVsCtypeAlnumBench | benchCtypeAlnum | 0 | 1000000 | 0.662μs | | |
| PregMatchVsCtypeAlnumBench | benchPregMatch | 0 | 1000000 | 0.215μs | | |
+----------------------------+-----------------+-----+---------+-----------------------------------------------------+ | |
suite: 1343c47e20292d83fe245094977e91decfee3831, date: 2020-05-19, stime: 03:21:39 | |
+----------------------------+-----------------+-----+---------+-----+----------+---------+---------+---------+---------+---------+--------+-------+ | |
| benchmark | subject | set | revs | its | mem_peak | best | mean | mode | worst | stdev | rstdev | diff | | |
+----------------------------+-----------------+-----+---------+-----+----------+---------+---------+---------+---------+---------+--------+-------+ | |
| PregMatchVsCtypeAlnumBench | benchCtypeAlnum | 0 | 1000000 | 10 | 455,968b | 0.657μs | 0.662μs | 0.660μs | 0.666μs | 0.003μs | 0.50% | 3.07x | | |
| PregMatchVsCtypeAlnumBench | benchPregMatch | 0 | 1000000 | 10 | 455,968b | 0.214μs | 0.215μs | 0.216μs | 0.217μs | 0.001μs | 0.50% | 1.00x | | |
+----------------------------+-----------------+-----+---------+-----+----------+---------+---------+---------+---------+---------+--------+-------+ | |
/app # php -v | head -1 | |
PHP 7.4.5 (cli) (built: Apr 17 2020 11:56:45) ( NTS ) | |
/app # composer show 2>&1 | grep phpbench | |
phpbench/container 1.2 Simple, configurable, service container. | |
phpbench/dom 0.2.0 DOM wrapper to simplify working with the PHP DOM implementation | |
phpbench/phpbench dev-master 7c3e155 PHP Benchmarking Framework | |
/app # cat /etc/os-release | grep PRETTY_NAME | |
PRETTY_NAME="Alpine Linux v3.11" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/app # # ------------------------------------------------------------------------------- | |
/app # # Bench result (Docker, keinos/php8-jit:latest) | |
/app # # ------------------------------------------------------------------------------- | |
/app # | |
/app # ./vendor/bin/phpbench run --retry-threshold=1 --revs=1000000 --iterations=10 --report=compare --report=aggregate ./PregMatchVsCtypeAlnumBench.php | |
PhpBench @git_tag@. Running benchmarks. | |
\PregMatchVsCtypeAlnumBench | |
benchCtypeAlnum.........................R1 I2 [μ Mo]/r: 0.670 0.670 (μs) [μSD μRSD]/r: 0.002μs 0.35% | |
benchPregMatch..........................R3 I7 [μ Mo]/r: 0.229 0.230 (μs) [μSD μRSD]/r: 0.001μs 0.56% | |
2 subjects, 20 iterations, 2,000,000 revs, 0 rejects, 0 failures, 0 warnings | |
(best [mean mode] worst) = 0.227 [0.450 0.450] 0.231 (μs) | |
⅀T: 8.991μs μSD/r 0.002μs μRSD/r: 0.456% | |
+----------------------------+-----------------+-----+---------+-----------------------------------------------------+ | |
| benchmark | subject | set | revs | suite:1343c47e481511132c08cfb70f13e90c9db7ea22:mean | | |
+----------------------------+-----------------+-----+---------+-----------------------------------------------------+ | |
| PregMatchVsCtypeAlnumBench | benchCtypeAlnum | 0 | 1000000 | 0.670μs | | |
| PregMatchVsCtypeAlnumBench | benchPregMatch | 0 | 1000000 | 0.229μs | | |
+----------------------------+-----------------+-----+---------+-----------------------------------------------------+ | |
suite: 1343c47e481511132c08cfb70f13e90c9db7ea22, date: 2020-05-19, stime: 03:41:46 | |
+----------------------------+-----------------+-----+---------+-----+----------+---------+---------+---------+---------+---------+--------+-------+ | |
| benchmark | subject | set | revs | its | mem_peak | best | mean | mode | worst | stdev | rstdev | diff | | |
+----------------------------+-----------------+-----+---------+-----+----------+---------+---------+---------+---------+---------+--------+-------+ | |
| PregMatchVsCtypeAlnumBench | benchCtypeAlnum | 0 | 1000000 | 10 | 444,728b | 0.666μs | 0.670μs | 0.670μs | 0.674μs | 0.002μs | 0.35% | 2.92x | | |
| PregMatchVsCtypeAlnumBench | benchPregMatch | 0 | 1000000 | 10 | 444,728b | 0.227μs | 0.229μs | 0.230μs | 0.231μs | 0.001μs | 0.56% | 1.00x | | |
+----------------------------+-----------------+-----+---------+-----+----------+---------+---------+---------+---------+---------+--------+-------+ | |
/app # php -v | head -1 | |
PHP 8.0.0-dev (cli) (built: Oct 2 2019 10:21:08) ( NTS ) | |
/app # composer --version | |
Composer version 1.10.6 2020-05-06 10:28:10 | |
/app # composer show 2>&1 | grep phpbench | |
phpbench/container 1.2 Simple, configurable, service container. | |
phpbench/dom 0.2.0 DOM wrapper to simplify working with the PHP DOM implementation | |
phpbench/phpbench 0.16.10 PHP Benchmarking Framework | |
/app # cat /etc/os-release | grep PRETTY_NAME | |
PRETTY_NAME="Alpine Linux v3.10" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment