ТОП-10 популярных


НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...


Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...

Internet2, или cтарые песни о новом
Когда-то на заре Интернета, тогдаеще военно-научной сетиAPRAnet, были заложены основныепринципы функционирования«Сети сетей». В их числе — использованиепротокола, называемого сейчасIPv4. В...

PHP. Эффективность и отладка. Часть Третья.


08-07-2015

Для того чтобы определить разницу во времени, можно обратиться к методу, который используется в листинге 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, не ограничивайтесь вводом в форму нескольких слов. Вводите реальные данные, включающие большие значения, но не настолько большие, чтобы это выходило за рамки обычного использования. Люди редко вводят тексты мегабитами, а это может привести к существенному снижению рабочих характеристик, поэтому этого следует избегать.
Необходимо помнить о том, что измерения необходимо производить после любой модификации программы. Это позволит проконтролировать достижение поставленных целей. Если изменение ухудшает рабочие характеристики, то разумнее будет вернуться к ранней версии. Измерения подтвердят правильность сделанных изменений.
Эффективность и отладка

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Эффективность и отладка. Часть Вторая. PHP. Эффективность и отладка. Часть Четвёртая.