Рубрика «php iternals»

в 7:35, , рубрики: php, php iternals

Зачем простому PHP разработчику может понадобится дебаг исходников? Ну например если он заметил какое то не очевидное поведение и хочет разобраться в нем на максимально “низком” уровне. О таком интересном для меня поведение, а так же процессе “дебага сурсов” я и хотел бы поговорить.

Мотивация

Начнем с места в карьер, вот два похожих куска кода:

Раз

$arr = [];

for ($i =0; $i < 300; $i++)
{
  $arr[rand(1,1000)] = 1;
}
 
$sum = 0;
for ($i = 1001; $i < 200000000; $i++){
  if (array_key_exists($i, $arr)){
    $sum++;
  }
}

Два

$arr = [];

for ($i =0; $i < 300; $i++)
{
  $arr[rand(1,1000)] = 1;
}

sort($arr);
 
$sum = 0;
for ($i = 1001; $i < 200000000; $i++){
  if (array_key_exists($i, $arr)){
    $sum++;
  }
}

Разница между ними в том, что во втором случае мы отсортировали массив $arr, тем самым обновили ключи 0..count($arr)-1. А заинтересовал меня тот момент, что первый скрипт выполняется 6.0 секунд, тогда как второй 4.7 секунды. Получается около 20 процентов разницы.

Если Вы знакомы с внутренним устройством хэш-таблицы php а так же с хэш функцией то Вы или уже знаете ответ или можете без особого труда догадаться. Ну а для остальных я расскажу как настроить среду для дебага и выяснить в чем же дело.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js