LINUX.ORG.RU

Приколы в быдлоязычке. Нужна помощь спецов (не лоботомистов)


0

0

Имеется пыхпых (тестилось в 5.2 и 4.4), решили сравнить разницу в 
скорости при использовании констант и текстовых строк в качестве индексов массивов. 

Вот код. 

function getmicrotime()
{
   list($usec, $sec) = explode(" ", microtime());
   return ((float)$usec + (float)$sec);
}


define("BLAH", 'qqq');

$arr = array('aaa'=>"1111",'bbb'=>"2222", 'ccc'=>"333", "qqq"=>"444343", 5=>"0987");
$cycles = 100000;

$time_start = getmicrotime();

for ($i = 0; $i < $cycles; $i++) {

    $temp0 = $arr[BLAH];
    $temp1 = $arr[BLAH];
    $temp2 = $arr[BLAH];
    $temp3 = $arr[BLAH];
    $temp4 = $arr[BLAH];

}

$time_end = getmicrotime();
$time1 = $time_end - $time_start;

$time_start = getmicrotime();

for ($i = 0; $i < $cycles; $i++) {
    
    $temp0 = $arr["qqq"];
    $temp1 = $arr["qqq"];
    $temp2 = $arr["qqq"];
    $temp3 = $arr["qqq"];
}

$time_end = getmicrotime();
$time2 = $time_end - $time_start;


echo sprintf("Const: %.6fs   <br />\nString: %.6fs\n <br/> K=%.3f",$time1,$time2,$time1/$time2);



В результате работы, коээфициент K в районе 2.4, т.е. использование 
констант более чем в два раза медленее использования обычных строк. 

Шо за фигня?
★★★★★

>Живи , и не думай. >Главное , чтоб работало

furyz
()

Судя по тому, как в PHP объявляются константы, они сделаны не на уровне препроцессора, как в C.

Ay49Mihas ★★★★
()

> Шо за фигня?

ЛОРОтмаза: мне лень запускать этот пример и смотреть на получающееся в моём случае K

а по поводу эффекта -

когда ты используешь просто строку интерпретатор получает непосредственное значение. а когда константу - интерпретатор видит некое имя, и для определения связанного с ним значения делает поиск в нескольких таблицах.

селяви, так сказать...

anonymous
()

Впрочем, если в обоих прогонах сделать одинаковое количество попыток К немного уменьшится.

anonymous
()

Интересно. А попробуй использовать не константу, а переменную. Возможно, что замедление может быть связано с проверками-догадками, созданными по причине того, что некоторые кодеры пишут arr[first] вместо arr['first'], при том, что константа first не определена.

HappyCoder
()

Бригада лоботомистов выехала. Инъекция жабы в мозг будет проведена незамедлительно

anonymous
()
Ответ на: комментарий от anonymous

> Впрочем, если в обоих прогонах сделать одинаковое количество попыток К немного уменьшится.

А, это в этом примере лишняя строка, когда тестил - всё нормально было, тут код в 4 головы выверяли...

AngryElf ★★★★★
() автор топика

А чего странного, лишний lookup в таблице символов делается всего и делов.

cobold ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.