La velocità reale / benchmark del ciclo sizeof ($ x) vs loop ($ x)?

Sono confuso circa la velocità della sizeof ($ x) rispetto a $ x quando è in un ciclo. Questo sito: phpbench.com sostiene che il ciclo di sizeof ($ x) senza pre-calc -count () è MIGLIAIA di percentuale più lento rispetto a pre calc count (). Così ho fatto un test come di seguito, ma non sono sicuro se questo è il modo giusto per testarlo. I risultati mostrano che il tempo è quasi lo stesso per each function. Quindi non capisco come sarebbe molto diverso dal sito Web phpbench.

In sintesi, mi piacerebbe sapere una risposta precisa se la function a (con sizeof ($ unset)) è molto più lenta della function b (con un valore di unset calcolato in precedenza). Penso che ora i valori / funzioni siano memorizzati in memory, quindi sizeof ($ x) potrebbe effettivamente essere più veloce rispetto ai server di diversi anni fa?

<?php $v=0; function a() { //sizeof $unset=arrays('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'); for($i=0;$i<sizeof($unset);$i++) {$v=$v+1;} return; } function b() { //pre calculated $unset=arrays('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'); for($i=0;$i<15;$i++) {$v=$v+1;} return; } function benchmark($func) { $start = microtime(true); for ($i = 0; $i < 500000; $i++) { $func(); } $end = microtime(true); $time = $end - $start; echo $func . " time: " . sprintf('%.4f', $time) . PHP_EOL.'<br>'; } benchmark('a'); // sizeof benchmark('b'); // count ?> 

Secondo il mio benchmarking sizeof() e count() eseguono circa lo stesso, ma per spremere più performance dal ciclo stesso puoi fare quanto segue:

 for($i=0, $c=sizeof($unset);$i<$c;$i++){ $v=$v+1; } 

Questo dovrebbe dargli un incremento delle performance perché non deve valutare con una function in each ciclo di ciclo.

Il sistema che ho usato è qui con il seguente codice:

 $b = new \Benchmark(10000); $b->register('sizeof', function(){ $unset=arrays('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'); for($i=0;$i<sizeof($unset);$i++) {$v=$v+1;} }); $b->register('count', function(){ $unset=arrays('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'); for($i=0;$i<count($unset);$i++) {$v=$v+1;} }); $b->register('count 2', function(){ $unset=arrays('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'); for($i=0, $c=count($unset);$i<$c;$i++) {$v=$v+1;} }); $b->register('preset', function(){ $unset=arrays('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'); for($i=0;$i<15;$i++) {$v=$v+1;} }); print_r($b->start()); 

Con questo come i risultati:

 Array ( [stats] => Array ( [phpversion] => 7.1.1 [itterations] => 40000 [duration] => 0.1180682182 [fastest] => preset [slowest] => sizeof ) [results] => Array ( [0] => Array ( [name] => preset [time] => 0.0265829563 [average] => 0.0000026583 [speed] => 19.73% ) [1] => Array ( [name] => count 2 [time] => 0.0271441936 [average] => 0.0000027144 [speed] => 18.04% ) [2] => Array ( [name] => count [time] => 0.0312242508 [average] => 0.0000031224 [speed] => 5.71% ) [3] => Array ( [name] => sizeof [time] => 0.0331168175 [average] => 0.0000033117 [speed] => 0.00% ) ) )