Last active
December 29, 2015 20:19
-
-
Save kalaomer/7722770 to your computer and use it in GitHub Desktop.
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 | |
set_time_limit(300); | |
error_reporting(E_ALL); | |
class test { | |
function func() {} | |
} | |
$test = new test; | |
$nIter = 1000000; | |
$argNums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 20]; | |
foreach ($argNums as $argNum) { | |
$args = $argNum == 0 ? [] : array_fill(0, $argNum, null); | |
$startTime = microtime(true); | |
for ($i = 0; $i < $nIter; ++$i) { | |
call_user_func_array(array($test, "func"), $args); | |
} | |
$endTime = microtime(true); | |
echo "cufa..... with $argNum args took ", $endTime - $startTime, "<br/>"; | |
$startTime = microtime(true); | |
for ($i = 0; $i < $nIter; ++$i) { | |
switch (count($args)) { | |
case 0: $test->func(); break; | |
case 1: $test->func($args[0]); break; | |
case 2: $test->func($args[0], $args[1]); break; | |
case 3: $test->func($args[0], $args[1], $args[2]); break; | |
case 4: $test->func($args[0], $args[1], $args[2], $args[3]); break; | |
default: call_user_func_array(array($test, "func"), $args); break; | |
} | |
} | |
$endTime = microtime(true); | |
echo "direct4 with $argNum args took ", $endTime - $startTime, "<br/>"; | |
$startTime = microtime(true); | |
for ($i = 0; $i < $nIter; ++$i) { | |
switch (count($args)) { | |
case 0: $test->func(); break; | |
case 1: $test->func($args[0]); break; | |
case 2: $test->func($args[0], $args[1]); break; | |
case 3: $test->func($args[0], $args[1], $args[2]); break; | |
case 4: $test->func($args[0], $args[1], $args[2], $args[3]); break; | |
case 5: $test->func($args[0], $args[1], $args[2], $args[3], $args[4]); break; | |
default: call_user_func_array(array($test, "func"), $args); break; | |
} | |
} | |
$endTime = microtime(true); | |
echo "direct5 with $argNum args took ", $endTime - $startTime, "<br/>"; | |
$startTime = microtime(true); | |
for ($i = 0; $i < $nIter; ++$i) { | |
switch (count($args)) { | |
case 0: $test->func(); break; | |
case 1: $test->func($args[0]); break; | |
case 2: $test->func($args[0], $args[1]); break; | |
case 3: $test->func($args[0], $args[1], $args[2]); break; | |
case 4: $test->func($args[0], $args[1], $args[2], $args[3]); break; | |
case 5: $test->func($args[0], $args[1], $args[2], $args[3], $args[4]); break; | |
case 6: $test->func($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]); break; | |
default: call_user_func_array(array($test, "func"), $args); break; | |
} | |
} | |
$endTime = microtime(true); | |
echo "direct6 with $argNum args took ", $endTime - $startTime, "<br/>"; | |
$startTime = microtime(true); | |
for ($i = 0; $i < $nIter; ++$i) { | |
switch (count($args)) { | |
case 0: $test->func(); break; | |
case 1: $test->func($args[0]); break; | |
case 2: $test->func($args[0], $args[1]); break; | |
case 3: $test->func($args[0], $args[1], $args[2]); break; | |
case 4: $test->func($args[0], $args[1], $args[2], $args[3]); break; | |
case 5: $test->func($args[0], $args[1], $args[2], $args[3], $args[4]); break; | |
case 6: $test->func($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]); break; | |
case 7: $test->func($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6]); break; | |
default: call_user_func_array(array($test, "func"), $args); break; | |
} | |
} | |
$endTime = microtime(true); | |
echo "direct7 with $argNum args took ", $endTime - $startTime, "<br/>"; | |
$startTime = microtime(true); | |
for ($i = 0; $i < $nIter; ++$i) { | |
switch (count($args)) { | |
case 0: $test->func(); break; | |
case 1: $test->func($args[0]); break; | |
case 2: $test->func($args[0], $args[1]); break; | |
case 3: $test->func($args[0], $args[1], $args[2]); break; | |
case 4: $test->func($args[0], $args[1], $args[2], $args[3]); break; | |
case 5: $test->func($args[0], $args[1], $args[2], $args[3], $args[4]); break; | |
case 6: $test->func($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]); break; | |
case 7: $test->func($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6]); break; | |
case 8: $test->func($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7]); break; | |
default: call_user_func_array(array($test, "func"), $args); break; | |
} | |
} | |
$endTime = microtime(true); | |
echo "direct8 with $argNum args took ", $endTime - $startTime, "<br/>"; | |
echo "<br/>"; | |
} |
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
Result: | |
cufa..... with 0 args took 2.3234748840332 | |
direct4 with 0 args took 2.221657037735 | |
direct5 with 0 args took 2.1198871135712 | |
direct6 with 0 args took 1.9100079536438 | |
direct7 with 0 args took 2.2164869308472 | |
direct8 with 0 args took 2.0375180244446 | |
cufa..... with 1 args took 2.876091003418 | |
direct4 with 1 args took 2.3113219738007 | |
direct5 with 1 args took 2.5826649665833 | |
direct6 with 1 args took 2.3003940582275 | |
direct7 with 1 args took 2.5728559494019 | |
direct8 with 1 args took 2.4689521789551 | |
cufa..... with 2 args took 2.7534861564636 | |
direct4 with 2 args took 2.2353329658508 | |
direct5 with 2 args took 2.6200020313263 | |
direct6 with 2 args took 2.6223680973053 | |
direct7 with 2 args took 2.4782650470734 | |
direct8 with 2 args took 2.2264201641083 | |
cufa..... with 3 args took 2.6287357807159 | |
direct4 with 3 args took 2.4872150421143 | |
direct5 with 3 args took 2.4751689434052 | |
direct6 with 3 args took 2.4236278533936 | |
direct7 with 3 args took 2.5335540771484 | |
direct8 with 3 args took 2.0688591003418 | |
cufa..... with 4 args took 2.4400899410248 | |
direct4 with 4 args took 2.1242189407349 | |
direct5 with 4 args took 2.3574469089508 | |
direct6 with 4 args took 2.2366180419922 | |
direct7 with 4 args took 2.2650620937347 | |
direct8 with 4 args took 2.3383798599243 | |
cufa..... with 5 args took 2.2263879776001 | |
direct4 with 5 args took 3.2700300216675 | |
direct5 with 5 args took 2.1632010936737 | |
direct6 with 5 args took 2.1753380298615 | |
direct7 with 5 args took 2.1594140529633 | |
direct8 with 5 args took 2.1733820438385 | |
cufa..... with 6 args took 2.2293989658356 | |
direct4 with 6 args took 3.3342609405518 | |
direct5 with 6 args took 3.3906331062317 | |
direct6 with 6 args took 2.2561731338501 | |
direct7 with 6 args took 2.2503859996796 | |
direct8 with 6 args took 2.2640450000763 | |
cufa..... with 7 args took 2.2761299610138 | |
direct4 with 7 args took 3.4104251861572 | |
direct5 with 7 args took 3.4465351104736 | |
direct6 with 7 args took 3.4869239330292 | |
direct7 with 7 args took 2.3297309875488 | |
direct8 with 7 args took 2.4133460521698 | |
cufa..... with 8 args took 2.6314709186554 | |
direct4 with 8 args took 3.8451640605927 | |
direct5 with 8 args took 3.8177552223206 | |
direct6 with 8 args took 3.9519009590149 | |
direct7 with 8 args took 3.864305973053 | |
direct8 with 8 args took 2.6021559238434 | |
cufa..... with 20 args took 3.1113379001617 | |
direct4 with 20 args took 4.1316969394684 | |
direct5 with 20 args took 4.1746439933777 | |
direct6 with 20 args took 4.2146589756012 | |
direct7 with 20 args took 4.4657280445099 | |
direct8 with 20 args took 4.219153881073 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment