Сравнение скорости (производительности) match Vs switch

Некоторые товарищи безосновательно полагают, что match быстрее switch. А проверим тестом, кто быстрее. Смысл программы следующий - много раз запустим селектор выбора и посчитаем разницу во времени. Для удобства воспользуемся возможностью передавать функцию с помощью лямбд.

<?php

function testTime($counter, $fn){
$time_start = microtime(true); 
for ($i=0;$i<$counter;$i++){
  $data = ['apple', 'bar', 'cake'][random_int(0, 2)];	
  $res = $fn($data);
};
 
$time_end = microtime(true);
return $time_end - $time_start;
}

$test1 = function($food) {
	return match($food){
	'apple'=> 'A',
	'bar'=>'B',
	'cake'=>'C'
	};
};


$test2 = function($food) {
	switch ($food){
	case 'apple' :  return 'A' ;
	case 'bar' :  return 'B' ;
	case 'cake' : return 'C'; 
	};
};


echo testTime( 1000000, $test1 ) . PHP_EOL;
echo testTime( 1000000, $test2 ) . PHP_EOL;
Теперь запустим код 0.96287798881531 0.62920999526978 Как видим, конструкция со switch на 33% быстрее match. Занавес )

Теги документа