Eléphant du PHP |
422 Messages
12 oct. 2010, 14:50
pour en avoir le coeur net un petit Bench
<?php
set_time_limit(0);
$nb_iterration = 1;
$size = 60;
function MakeRandomNumShuffle($size){
$tab_result = range(1,$size);
shuffle($tab_result);
return $tab_result;
}
function MakeRandomNumWhile($size){
$nb_a_tirer = $size;
$val_min = 1;
$val_max = $size+100; // +100 = pour éviter de mouliner
$tab_result = array();
while($nb_a_tirer != 0 )
{
$nombre = mt_rand($val_min, $val_max);
if( !in_array($nombre, $tab_result) )
{
$tab_result[] = $nombre;
$nb_a_tirer--;
}
}
return $tab_result;
}
//-----------------------------
$time_startA = microtime(true);
ob_start();
for($i=0;$i<$nb_iterration;$i++){
MakeRandomNumWhile($size);
}
$time_endA = microtime(true);
//-----------------------------
$time_startB = microtime(true);
ob_start();
for($i=0;$i<$nb_iterration;$i++){
MakeRandomNumShuffle($size);
}
$time_endB = microtime(true);
//-----------------------------
$timeA = $time_endA - $time_startA;
$timeB = $time_endB - $time_startB;
$div = $timeA/$timeB;
echo "While size $size ; $nb_iterration fois : $timeA seconds<br/>\n";
echo "shuffle size $size ; $nb_iterration fois : $timeB seconds<br/>\n";
echo "while/shuffle $div<br/>\n";
?>
résultat :
While size 10 ; 5 fois : 0.00015497207641602 seconds
shuffle size 10 ; 5 fois : 4.3153762817383E-005 seconds
while/shuffle 3.5911602209945
While size 20 ; 5 fois : 0.00033688545227051 seconds
shuffle size 20 ; 5 fois : 6.5088272094727E-005 seconds
while/shuffle 5.1758241758242
While size 40 ; 5 fois : 0.00076580047607422 seconds
shuffle size 40 ; 5 fois : 0.00010299682617188 seconds
while/shuffle 7.4351851851852
While size 60 ; 5 fois : 0.0018417835235596 seconds
shuffle size 60 ; 5 fois : 0.00014591217041016 seconds
while/shuffle 12.622549019608
de manière générale utiliser les fonctions native est plus rapide. Mais j'ai pu faire une erreur !
++