Created
April 27, 2016 20:46
-
-
Save autoferrit/6ed4ad16ede41644b37992c0debfb459 to your computer and use it in GitHub Desktop.
testing php regex vs builtin
This file contains hidden or 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 | |
function test1( $string ) | |
{ | |
return strtoupper( $string[0] ) === $string[0]; | |
} | |
function test2( $string ) | |
{ | |
return preg_match( '/^[A-Z]/', $string ); | |
} | |
function results($builtin, $regex) { | |
$faster = ($builtin > $regex) ? 'regex' : 'builtin'; | |
if ('regex' == $faster) { | |
$r = 100 - (($regex / $builtin) * 100); | |
} else { | |
$r = 100 - (($builtin / $regex) * 100); | |
} | |
return "$faster is faster by " . number_format($r, 2) . "%\n\n"; | |
} | |
$limit = 1000; | |
$builtinTotal = 0; | |
$regexTotal = 0; | |
$shortLower = "foo"; | |
$shortUpper = "Foo"; | |
$longLower = "foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo "; | |
$longUpper = "Foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo "; | |
$vlongLower = " | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
"; | |
$vlongUpper = " | |
Foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo | |
"; | |
print "\n\n#####\n > Testing the following:\n"; | |
print ' > $shortLower = "foo"'; | |
print "\n"; | |
print ' > $shortUpper = "Foo"'; | |
print "\n"; | |
print ' > $longLower = "foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo "'; | |
print "\n"; | |
print ' > $longUpper = "Foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo "'; | |
print "\n\n"; | |
print "###### TEST: lower short\n"; | |
print "builtin\n"; | |
$start = microtime(true); | |
for ($i = 0; $i < $limit; $i++) { | |
test1($shortLower); | |
} | |
$end = microtime(true); | |
$elapsedA = $end - $start; | |
print " >> builtin Time elapsed: $elapsedA\n\n"; | |
print "regex\n"; | |
$start = microtime(true); | |
for ($i = 0; $i < $limit; $i++) { | |
test2($shortLower); | |
} | |
$end = microtime(true); | |
$elapsedB = $end - $start; | |
print " >> regex Time elapsed: $elapsedB\n\n"; | |
$builtinTotal += $elapsedA; | |
$regexTotal += $elapsedB; | |
print "Result: " . results($elapsedA, $elapsedB); | |
print "###### TEST: upper short\n"; | |
print "builtin\n"; | |
$start = microtime(true); | |
for ($i = 0; $i < $limit; $i++) { | |
test1($shortUpper); | |
} | |
$end = microtime(true); | |
$elapsedA = $end - $start; | |
print " >> builtin Time elapsed: $elapsedA\n\n"; | |
print "regex\n"; | |
$start = microtime(true); | |
for ($i = 0; $i < $limit; $i++) { | |
test2($shortUpper); | |
} | |
$end = microtime(true); | |
$elapsedB = $end - $start; | |
print " >> regex Time elapsed: $elapsedB\n\n"; | |
$builtinTotal += $elapsedA; | |
$regexTotal += $elapsedB; | |
print "Result: " . results($elapsedA, $elapsedB); | |
print "###### TEST: lower long\n"; | |
print "builtin\n"; | |
$start = microtime(true); | |
for ($i = 0; $i < $limit; $i++) { | |
test1($longLower); | |
} | |
$end = microtime(true); | |
$elapsedA = $end - $start; | |
print " >> builtin Time elapsed: $elapsedA\n\n"; | |
print "regex\n"; | |
$start = microtime(true); | |
for ($i = 0; $i < $limit; $i++) { | |
test2($longLower); | |
} | |
$end = microtime(true); | |
$elapsedB = $end - $start; | |
print " >> regex Time elapsed: $elapsedB\n\n"; | |
$builtinTotal += $elapsedA; | |
$regexTotal += $elapsedB; | |
print "Result: " . results($elapsedA, $elapsedB); | |
print "###### TEST: lower very long\n"; | |
print "builtin\n"; | |
$start = microtime(true); | |
for ($i = 0; $i < $limit; $i++) { | |
test1($vlongLower); | |
} | |
$end = microtime(true); | |
$elapsedA = $end - $start; | |
print " >> builtin Time elapsed: $elapsedA\n\n"; | |
print "regex\n"; | |
$start = microtime(true); | |
for ($i = 0; $i < $limit; $i++) { | |
test2($vlongLower); | |
} | |
$end = microtime(true); | |
$elapsedB = $end - $start; | |
print " >> regex Time elapsed: $elapsedB\n\n"; | |
$builtinTotal += $elapsedA; | |
$regexTotal += $elapsedB; | |
print "Result: " . results($elapsedA, $elapsedB); | |
print "###### TEST: upper long\n"; | |
print "builtin\n"; | |
for ($i = 0; $i < $limit; $i++) { | |
test1($longUpper); | |
} | |
$end = microtime(true); | |
$elapsedA = $end - $start; | |
print " >> builtin Time elapsed: $elapsedA\n\n"; | |
print "regex\n"; | |
$start = microtime(true); | |
for ($i = 0; $i < $limit; $i++) { | |
test2($longUpper); | |
} | |
$end = microtime(true); | |
$elapsedB = $end - $start; | |
print " >> regex Time elapsed: $elapsedB\n\n"; | |
$builtinTotal += $elapsedA; | |
$regexTotal += $elapsedB; | |
print "Result: " . results($elapsedA, $elapsedB); | |
print "###### TEST: upper very long\n"; | |
print "builtin\n"; | |
for ($i = 0; $i < $limit; $i++) { | |
test1($vlongUpper); | |
} | |
$end = microtime(true); | |
$elapsedA = $end - $start; | |
print " >> builtin Time elapsed: $elapsedA\n\n"; | |
print "regex\n"; | |
$start = microtime(true); | |
for ($i = 0; $i < $limit; $i++) { | |
test2($vlongUpper); | |
} | |
$end = microtime(true); | |
$elapsedB = $end - $start; | |
print " >> regex Time elapsed: $elapsedB\n\n"; | |
$builtinTotal += $elapsedA; | |
$regexTotal += $elapsedB; | |
print "Result: " . results($elapsedA, $elapsedB); | |
print "\n# Grand total: " . results($builtinTotal, $regexTotal); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment