Страница сгенерирована за ...
В этом небольшой статье я хочу рассказать вам, как засечь
время выполнения вашего кода на PHP. Многие
называют этот прием подсчетом времени генерации
страницы. Мне это название также пришлось по душе,
так что в дальнейшем буду употреблять его чаще.
Не говорите мне, что вы ни разу не видели примерно такой
надписи на сайтах:
Страница сгенерирована за 0.235467
секунд или
Page generated in 0.235467 seconds
Прикольная вещь, однако. Не ошибусь, если вы тоже хотите
реализовать её на своем сайте? Хотите - тогда поехали.
Сначала объясню логику работы такой фишки. Она очень
проста:
- Перед выполнением того кода, который мы хотим засечь,
считываем текущее время.
- После выполнения кода, опять же считываем текущее время
и выводим разницу получившихся времен.
Рекомендую сразу части скрипта, отвечающие за подсчет
времени в начале и в конце кода, соответственно, вынести в
отдельные файлы и вставлять их по мере необходимости.
Итак, код скрипта start.php, который
подсчитывает текущее время (вставлять в том месте, откуда
начинаем подсчет, т.е. где-то в начале страницы).
<? #------ файл start.php
// считываем
текущее время $start_time = microtime(); // разделяем
секунды и миллисекунды (становятся значениями начальных ключей
массива-списка) $start_array = explode("
",$start_time); // это и есть стартовое
время $start_time = $start_array[1] +
$start_array[0]; ?>
Стартовое время подсчитали. Теперь код файла
end.php, который также подсчитывает текущее
время, а затем выводит разность этого времени от подсчитанного
в файле start.php, т.е., по сути дела, и
выводит время генерации страницы.
<? #------ файл end.php
// делаем то же,
что и в start.php, только используем другие
переменные $end_time = microtime(); $end_array =
explode(" ",$end_time); $end_time = $end_array[1] +
$end_array[0]; // вычитаем из конечного времени
начальное $time = $end_time - $start_time; // выводим в
выходной поток (броузер) время генерации
страницы printf("Страница сгенерирована за
%f секунд",$time); ?>
В принципе, все. Файл start.php вставляйте
туда, откуда хотите начинать засекать время;
end.php - где захотите "остановить ваш
секундомер". Вставки файлов можете осуществлять, к примеру,
инструкцией include();
Дело сделано... однако, наверняка вы хотите разобраться,
как же работает то, что мы написали. Лично я не люблю юзать
чужие наработки в принципе. А если и юзаю, то, обязательно
разобравшись в их работе. Далее объясню вам, для чего служат
функции, которые мы применяли в примерах и дам несколько
советов. Функции, использовавшиеся в
примерах
- string microtime() - возвращает строку
в формате: "микросекунды секунды", в которой секунды -
timestamp, возвращаемый функцией
time(), а микросекунды - дробная часть
секунд, служащаяся для более точного измерения промежутков
времени. Функция работает только в системах, которые
поддерживают системный вызов
gettimeofday(), т.е. практически во всех.
- Замечание: timestamp - формат
времени, который равняется "кол-ву секунд, прошедших с
полуночи 1 января 1970 года по Гринвичу до настоящего
момента". Этот формат данных принят в осях UNIX, как
стандартный. Универсальное и удобное представление, с
которым вы еще не раз столкнетесь.
- array explode(string separator, string string [,
int limit]) - получает строку, заданную в её втором
аргументе и пытается найти в ней подстроки, равные первому
аргументу. Затем по месту вхождения этих подстрок строка
"разрезается" на части, помещаемые в массив-список, который
и возвращается. Если задан параметр limit, то учитываются
только первые limit-1 участков "разреза". Таким образом,
возвращается список из не более чем limit элементов.
- Замечание: string implode(string glue, array
pieces) (синоним - join()) -
ф-и, полностью противоположные по значению ф-и
explode(). Они берут ассоциативный массив
(как правило, это список) pieces и склеивают его значению
в единую строку при помощи "строки-клея" glue.
- void printf (string format [, mixed
args]) - ф-я, полностью аналогичная своей
C версии. Она выводит в броузер строку,
составленную на основе строки форматирования, содержащей
некоторые специальные символы, которые будут впоследствии
заменены на значения соответствующих переменных из списка
аргументов. Параметры:
format -
строковой формат вывода данных args -
аргументы для форматирования Я не буду подробно
останавливаться на этой функции, так как её полное описание
достаточно объемное (ну не так уж чтобы...), да и сама
функция очень мощная (медлительная в том числе). Скажу лишь,
что в нашем случае мы используем её для того, чтобы при
выводе преобразовать получившееся "время генерации страницы"
до числа с плавающей точкой (x.xxxxxx). Т.е. чтобы после
точки содержалось не более 6 символов.
- Замечание: можно было и воспользоваться простым
вызовом функции типа echo() или
print(). Однако в этом случае, выведется
число с большим количеством цифр после плавающей точки!
Советы (а точнее совет=)
- Примеры можно использовать для засекания выполнения
любого скриптового фрагмента. Т.е., совсем необязательно то,
что на сайте засекается полностью генерация динамичной
страницы. Некоторые мухлюют, засекая вообще не понятно что;
поэтому не приходиться удивляться, что сайт, грузящийся со
скоростью таракана, сгенерирован за удивительно малое время.
В принципе, время генерации и время вывода страницы - совсем
разные вещи.
На этом я прощаюсь с вами. Учил вас засекать время
генерации страницы Makswell =%)
Автор: Makswell
Источник: www.progers.ru
|