Профессиональное программирование на PHP

Страница 437 из 591


454 Глава 19 Сравнительное тестирование производительности...

PEAR-комплект для эталонного тестирования

В библиотеке PEAR имеется встроенный комплект для эталонного тестирования, Benchmark_Iterate, который удовлетворяет почти всем вышеописанным критериям. Пакет Benchmark_Iterate пригоден для многих простых задач, связанных с эталонным тестированием.

Benchmark_Iterate запускает функцию в пустом цикле, записывает время начала и конца каждого прогона и обеспечивает средства доступа для получения сводной информации по результатам тестирования.

Чтобы использовать Данный комплект, необходимо установить Benchmark-библиотеки. Комплект Benchmark-классов поставлялся вместе с РНР до версии 4.3 РНР. Для версий РНР выше 4.3 необходимо либо загрузить классы с сайта http : //pear. php . net, либо использовать для установки PEAR-инсталлятор:

# pear install Benchmark

Ниже приведен код для измерения производительности функции foo () по 1 ООО итераций. Создается Benchmark_Iterate-oбъeкт, вызывается метод run, которому в качестве первого параметра передается количество итераций (1 ООО), а затем распечатывается среднее время выполнения:

require 'Benchmark/Iterate.php'; $benchmark = new Benchmark_Iterate; $benchmark->run(1000, foo); $result = $benchmark->get ();

print "Среднее время выполнения функции foo: $result[mean]\n";

В качестве простого примера применения класса' можно использовать тестовый комплект для сравнения скорости выполнения встроенной функции max () с пользовательской функцией my_max (). Пример наглядно показывает, что итерация в массивах встроенными средствами РНР может быть значительно быстрее пользовательской функции.

Функция my_max () работает идентично встроенной функции max (), выполняя линейный поиск в переданном ей массиве и отслеживая наибольший из обработанных элементов массива.

Function my_max(&$array) { $max = $array[0]; Foreach ($array as $el) { If($element > $max) { $max = $element;

}

}

return $max;

}

Для тестирования функций обработки массивов желательно использовать случайные тестовые данные. Можно написать удобную функцию для генерации таких массивов и добавить ее в подключаемый файл test_data. inc, чтобы впоследствии можно было использовать ее повторно.

Function random_array($size) { For($I=0; $I<$size; $I++) { $array[] = mt_rand();




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006