Главная » Полезные статьи » Язык PHP » Страница сгенерирована за …
Распечатать статью

Страница сгенерирована за …

Всем доброго времени суток!

В этом небольшой статье я хочу рассказать вам, как засечь время выполнения вашего кода на 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(). Однако в этом случае, выведется число с большим количеством цифр после плавающей точки!
Советы (а точнее совет=)
Примеры можно использовать для засекания выполнения любого скриптового фрагмента. Т.е., совсем необязательно то, что на сайте засекается полностью генерация динамичной страницы. Некоторые мухлюют, засекая вообще не понятно что; поэтому не приходиться удивляться, что сайт, грузящийся со скоростью таракана, сгенерирован за удивительно малое время. В принципе, время генерации и время вывода страницы — совсем разные вещи. Например, на нашем сайте — Progers.ru мы засекаем время выполнения всего кода PHP, который присутствует.

Вот, пожалуй и все, что я хотел вам рассказать относительно этой темы. Типичный пример можете видеть на нашем сайте — Progers.ru, где в копирайтах выводится это пресловутое время генерации страницы.

Если вы нашли ошибки\неточности в статье или просто хотите поделиться впечатлениями, аль спросить меня о чем-либо по этой теме, то пишите или оставляйте здесь свои комментарии.

На этом я прощаюсь с вами. Учил вас засекать время генерации страницы Makswell =%)

Источник:   codingrus.ru

Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи