Оптимальное тестирование.

hayk

Новичок
Оптимальное тестирование.

У меня есть две ф-ции, который делают одно и то же, но по разному. Я задался целью протестировать, какая из них работает быстрее.
У меня получилось следующее:
PHP:
$file = './tests/arm8/test3.html';
$str = file_get_contents($file);

// блок1
ci('t1');
$str1 = func1($str);
cs('t1');

// блок2
ci('t2');
$str2 = func2($str);
cs('t2');
Но результаты от раза к разу сильно разнятся. Как получить достоверные результаты?
Файл примерно с мегабайт.
 

hayk

Новичок
PHP:
function func1($str)
{
	global $conv_array;

	$result = '';
	$len = strlen($str);
	$unpack = sprintf('C%dcode', $len);
	$data = unpack($unpack, $str);

	foreach ($data as $char)
	{
		$result .= pack('v', $conv_array[ $char ]);
	}

	return $result;
}

function func2($str)
{
	global $conv_array;

	$result = '';
	$strlen = strlen($str);
	for ($i = 0; $i < $strlen; $i++)

	{
		$result .= pack('v', $conv_array[ ord( $str{$i} ) ]);
	}

	return $result;
}
 

hayk

Новичок
lucas
Проблема не в том чем мерить, а как мерить.

-~{}~ 09.02.04 17:19:

StUV
Cпасибо, но все равно непонтно.
Как правильнее? Один раз прогнать по большому куску данных, или же 1000 раз по маленькому?
 

lucas

Guest
1. ИМХО, при тестировании нужно преимущественно использовать "куски данных", сходные с теми, что будут в реальной работе + тесты на предельные нагрузки.

2. Разве в func1 foreach не заменяется на for?
 

hayk

Новичок
lucas
1. Теоретически я это понимаю, как это практически сделать?
Как тестировать с маленькими данными? Например, как влияет кэширование на результат вызова ф-ции 1000 раз?

2. Заменяется, но тогда надо сразу изменить и эту строку 'C%dcode' на 'C%d'.
Просто в результате получается массив, первый элемент которого с индексом 1.
Спасибо, так наверное действительно лучше.

-~{}~ 09.02.04 18:31:

StUV
Начал тестировать так, как представлял себе, но результаты которые я получал сильно разнились. На одних и тех же данных получались очень разные результаты.
 
Сверху