Для того чтобы определить разницу во времени, можно обратиться к методу, который используется в листинге 28.1. Записи, хранящиеся в массиве времени, содержат описание с последующим выводом функции microtime. Функция explode разбивает эти три значения, поэтому сценарий может отображать таблицу с временными значениями. В первом столбце таблицы хранится время в секундах, прошедшее с момента последнего ввода.
Листинг 28.1. Вычисление разницы во времени с помощью функции microtime
<?php
//время запуска
$clock[] = 'Start ' . microtime(); //сымитировать некое продолжительное вычисление $value = 0;
for($index = 0; $index < 10 00 0; $index++) {
$value += (cos(time()%pi()));
}
//время завершения $clock[] = 'cos ' . microtime(); //запись в файл
$fp = fopen("/tmp/data.txt", "w");
for($index = 0; $index < 10000; $index++)
{
fputs($fp, "Тестирование производительностиn"),•
}
fclose($fp); // время завершения
$clock[] = 'fputs ' . microtime(); // распечатать время $entry = explode(' ', $clock[0]); $lastVal = $entry[1] + $entry[2]; print('<table border="1">'),-foreach($clock as $c)
{
$entry = explode(' ', $c); print('<tr>');
print('<td>' . ($entry[1] + $entry[2] - $lastVal) . '</td>'),-
print('<td>' . $entry[0] . '</td>'),-
print('<td>' . ($entry[1] + $entry[2]) . '</td>');
print('</tr>');
$lastVal = $entry[1] + $entry[2];
}
print('</table>');
?>
Вставка HTML-комментариев является моим любимым методом, поскольку он не требует никакой специальной подготовки. Слабой стороной его можно считать небольшой размер выборки. Я всегда делаю три-четыре загрузки страницы, чтобы исключить любую дисперсию, которая может быть вызвана кэшированием или обработкой сервером запросов от других задач в момент проведения тестирования. Web-сервер Apache имеет программу ApacheBench (или исполняемый файл ab), позволяющую решить эту проблему путем измерения количества запросов, которые способен обработать сервер. Программа ApacheBench делает несколько запросов по указанному адресу и составляет отчет о том, сколько времени это занимает. На рис. 28.2 показаны результаты обработки 1000 запросов для простого HTML-сценария. Строка, выделенная жирным шрифтом, - это команда, инициирующая получение отчета.
Я запросил HTML-документ для того, чтобы получить информацию об основных показателях производительности моего сервера. Любой PHP-сценарий должен работать медленнее, чем HTML-документ. Сравнение этих цифр дает мне представление о возможностях улучшения работы сценария. Если будет установлено, что сервер может обслужить PHP-сценарий со скоростью 10 запросов в секунду, то можно сделать вывод, что у меня есть большой простор для улучшения. При этом важно помнить, что ApacheBench работает на сервере, а это снижает влияние такого фактора, как перенос данных по сети, но при этом программа использует некоторое процессорное время. Проверку можно произвести и с другой машины и определить, таким образом, чистое время работы только Web-сервера.
По умолчанию программа ApacheBench производит одно подключение за одно обращение к ней. Если в аргументе -n указано значение 100, она сделает 100 последовательных подключений. В действительности Web-серверы обрабатывают одновременно множество запросов. Аргументом -c задается уровень параллельной работы. Так, например, -n 1000 -c 10 делает одну тысячу соединений при десяти активизированных запросах. Это помогает снизить количество обрабатываемых сервером запросов, но на более низких уровнях скорость реакции сервера будет зависеть от задержек, связанных со скоростью ответа аппаратной части, такой, например, как жесткие диски.
Программа ApacheBench является хорошим средством определения общей картины, но она не может определить, какая часть сценария тормозит работу всего сценария. Это также справедливо и в отношении накладных расходов, связанных с подключением к серверу и обработкой HTTP-кода. Однако это ограничение можно обойти, если внести изменения в сценарий.
Вставив комментарии в части и сравнивая рабочие характеристики, можно определить, какие части являются самыми медленными. С другой стороны, программу ApacheBench можно использовать с комментариями microtime.
Какой бы метод ни использовался, тестирование необходимо выполнять в определенном диапазоне значений. Если программа работает с пользовательским вводом, необходимо опробовать как простые, так и сложные случаи, концентрируясь при этом на общих случаях. Например, при тестировании программы, анализирующей текст из тега textarea, не ограничивайтесь вводом в форму нескольких слов. Вводите реальные данные, включающие большие значения, но не настолько большие, чтобы это выходило за рамки обычного использования. Люди редко вводят тексты мегабитами, а это может привести к существенному снижению рабочих характеристик, поэтому этого следует избегать.
Необходимо помнить о том, что измерения необходимо производить после любой модификации программы. Это позволит проконтролировать достижение поставленных целей. Если изменение ухудшает рабочие характеристики, то разумнее будет вернуться к ранней версии. Измерения подтвердят правильность сделанных изменений.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Эффективность и отладка. Часть Третья.
08-07-2015
<< Предыдущая статья | Следующая статья >> |
PHP. Эффективность и отладка. Часть Вторая. | PHP. Эффективность и отладка. Часть Четвёртая. |