время генерации страницы что это
Всем доброго времени суток!
В этом небольшой статье я хочу рассказать вам, как засечь время выполнения вашего кода на PHP. Многие называют этот прием подсчетом времени генерации страницы. Мне это название также пришлось по душе, так что в дальнейшем буду употреблять его чаще.
Не говорите мне, что вы ни разу не видели примерно такой надписи на сайтах:
Сначала объясню логику работы такой фишки. Она очень проста:
Рекомендую сразу части скрипта, отвечающие за подсчет времени в начале и в конце кода, соответственно, вынести в отдельные файлы и вставлять их по мере необходимости.
Итак, код скрипта start.php, который подсчитывает текущее время (вставлять в том месте, откуда начинаем подсчет, т.е. где-то в начале страницы).
Файл start.php
Стартовое время подсчитали. Теперь код файла end.php, который также подсчитывает текущее время, а затем выводит разность этого времени от подсчитанного в файле start.php, т.е., по сути дела, и выводит время генерации страницы.
Файл end.php
Дело сделано. однако, наверняка вы хотите разобраться, как же работает то, что мы написали. Лично я не люблю юзать чужие наработки в принципе. А если и юзаю, то, обязательно разобравшись в их работе. Далее объясню вам, для чего служат функции, которые мы применяли в примерах и дам несколько советов.
Функции, использовавшиеся в примерах
Советы (а точнее совет=)
Если вы нашли ошибки\неточности в статье или просто хотите поделиться впечатлениями, аль спросить меня о чем-либо по этой теме, то пишите или оставляйте здесь свои комментарии.
На этом я прощаюсь с вами. Учил вас засекать время генерации страницы Makswell =%)
Время генерации страницы
В этом небольшой статье я хочу рассказать вам, как засечь время выполнения вашего кода на PHP. Многие называют этот прием подсчетом времени генерации страницы. Мне это название также пришлось по душе, так что в дальнейшем буду употреблять его чаще.
Не говорите мне, что вы ни разу не видели примерно такой надписи на сайтах:
Страница сгенерирована за 0.235467 секунд
Page generated in 0.235467 seconds
Рекомендую сразу части скрипта, отвечающие за подсчет времени в начале и в конце кода, соответственно, вынести в отдельные файлы и вставлять их по мере необходимости.
Итак, код скрипта start.php, который подсчитывает текущее время (вставлять в том месте, откуда начинаем подсчет, т.е. где-то в начале страницы).
Стартовое время подсчитали. Теперь код файла end.php, который также подсчитывает текущее время, а затем выводит разность этого времени от подсчитанного в файле start.php, т.е., по сути дела, и выводит время генерации страницы.
Дело сделано. однако, наверняка вы хотите разобраться, как же работает то, что мы написали. Лично я не люблю юзать чужие наработки в принципе. А если и юзаю, то, обязательно разобравшись в их работе. Далее объясню вам, для чего служат функции, которые мы применяли в примерах и дам несколько советов.
Вот, пожалуй и все, что я хотел вам рассказать относительно этой темы.
Всем доброго времени суток!
В этом небольшой статье я хочу рассказать вам, как засечь время выполнения вашего кода на PHP. Многие называют этот прием подсчетом времени генерации страницы. Мне это название также пришлось по душе, так что в дальнейшем буду употреблять его чаще.
Не говорите мне, что вы ни разу не видели примерно такой надписи на сайтах:
Прикольная вещь, однако. Не ошибусь, если вы тоже хотите реализовать её на своем сайте? Хотите — тогда поехали.
Сначала объясню логику работы такой фишки. Она очень проста:
Рекомендую сразу части скрипта, отвечающие за подсчет времени в начале и в конце кода, соответственно, вынести в отдельные файлы и вставлять их по мере необходимости.
Итак, код скрипта start.php, который подсчитывает текущее время (вставлять в том месте, откуда начинаем подсчет, т.е. где-то в начале страницы).
Стартовое время подсчитали. Теперь код файла end.php, который также подсчитывает текущее время, а затем выводит разность этого времени от подсчитанного в файле start.php, т.е., по сути дела, и выводит время генерации страницы.
В принципе, все. Файл 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 =%)
Оптимизация времени генерации страницы
Часто возникают вопросы производительности проектов на базе «1С-Битрикс», для решения которых нет необходимости прибегать к «экстремальным методам». Чтобы, помочь в решении таких проблем, особенно разработчикам только начинающим работать с «1С-Битрикс», рассмотрим пример оптимизации «некой» страницы информационного сайта. Для этого будем использовать только встроенный в продукт инструментарий.
Смотрим какой запрос генерирует основную нагрузку, копируем его в SQL консоль выполняя EXPLAIN.
Видим, что в выбоке из таблицы b_iblock_element задействованно очень много строк. При этом используемый индекс ix_iblock_element_code в данном случае не эффективен. Проанализировав запрос приходим к выводу что основная проблема в данном случае из за проверки периода активности у элемента
Предположим, что по ряду причин используются инфоблоки+, как же будут выглядеть время генерации страницы? Конвертируем инфоблок и смотрим время выполнения:
И смотрим результат
Как видим и в данном случае добились хорошей производительности.
Добавлять индексы по дате активности в b_iblock_element надо осторожно. Может быть ситуация в которой данный индекс будет не желательно использовать. В этом случае можно дату начала и окончания активности в виде timestamp продублировать в виде числовых свойств инфоблока и фильтровать по ним.
При добавление своих индексов надо создавать заведомо уникальное имя, чтобы не возникла ситуация при которой может совпасть имя созданного вами индекса и индекса который может быть добавлен через систему обновлений.
В первых инфоблоках уже есть индекс на все числовые свойства, и ID значений свойств списков. Если же вы используете инфоблоки+ то вам надо в ручную проставить индексы на те свойства по которым у вас будет осуществляться выборка
В дальнейшем постараюсь затронуть и другие моменты оптимизации.
Оптимизация скорости сайта: как уменьшить время ответа сервера
Время ответа сервера — первое, на что стоит обратить внимание на этапе оптимизации скорости загрузки сайта. В этой статье рубрики «Азбука SEO» я расскажу, как уменьшить время ответа сервера и сделать сайт более «шустрым».
Скорость ответа сервера — только вершина айсберга. Нужна комплексная оптимизация сайта — оставляйте заявку на услугу:
Что такое TTFB?
TTFB (Time To First Byte) — время до получения первого байта веб-страницы после отправки запроса со стороны клиента. Чем меньше этот показатель, тем быстрее браузер начнет загружать страницу.
Кстати, специалисты MOZ провели исследование о связи TTFB и позиции страницы в выдаче. Главный график в статье:
По рекомендациям Google, показатель TTFB не должен превышать 200 мс, а в идеале должен быть не более 50 мс. Если время ответа больше, потребуется определить причину и устранить её.
Как проверить TTFB?
Использовать отладчик в браузере
Для проверки TTFB можно использовать отладчик браузера. Например, в Google Chrome и Mozilla Firefox отладчик запускается комбинацией клавиш «Ctrl+Shift+I». После этого необходимо выбрать вкладку «Network» (Сеть), перезагрузить страницу и отфильтровать ресурсы по типу HTML (Doc). Далее нужно выбрать текущую загруженную страницу и во вкладке «Timing» в строке «Waiting» будет указано время ответа сервера.
Получить данные из Google Analytics
Необходимо перейти по пути «Поведение» — «Скорость загрузки сайта» — «Обзор». Далее в блоке «Среднее время ответа сервера (сек.)» будет указан TTFB за выбранный промежуток времени.
Использовать PageSpeed Insights
Также можно использовать инструмент PageSpeed Insights. Введите URL веб-страницы и запустите анализ. После завершения анализа при наличии проблемы с TTFB вы сможете в увидеть это показатель в блоке «Сократите время от сервера».
Использовать Netpeak Spider
Netpeak Spider — десктопный краулер для комплексного SEO-аудита всего сайта. Чтобы узнать время ответа сервера с помощью этого инструмента, вставьте URL в адресную строку, запустите сканирование (кнопка «Старт») и выберите столбец «Время ответа сервера».
Кстати, если TTFB страницы составит более 500 мс, Netpeak Spider покажет ошибку средней степени критичности. Все такие страницы можно удобно отфильтровать после сканирования — просто кликните на искомую ошибку в правой панели:
Использовать сторонние сервисы
Простой и удобный инструмент — Webpagetest. Узнать значение TTFB можно в колонке «First Byte»:
При использовании стороннего ресурса либо прокси загрузка сайта происходит с другого сервера, поэтому результаты могут сильно отличаться — многое зависит от удаленности расположения сервера, с которого происходит загрузка, от сервера, на который проводится загрузка данных.
Проверяйте TTFB не только на главной странице, но и на страницах категорий, карточках товаров. Время ответа может отличаться на разных типах страниц.
Что может быть причиной большого TTFB?
На время ответа сервера плохо влияет:
Для определения точной причины необходима помощь опытного программиста и системного администратора.
Как уменьшить время ответа сервера?
Оптимизировать работу с базой данных
При формировании страниц сервер каждый раз обращается к базе данных, чтобы получить необходимую информацию. Каждый запрос занимает определенное время, и чем больше запросов, тем больше общее время генерации страницы.
Например, при формировании блока «с этим товаром также покупают» выполняются следующие запросы:
Чем больше товаров и совершенных заказов на сайте — тем больше необходимо времени на формирование ответа. Чтобы уменьшить количество запросов к базе данных, можно хранить уже сформированный ответ в кэше — так вместо пяти запросов будет выполнен всего один.
Эту задачу необходимо делегировать команде опытных программистов, которые смогут провести отладку и обнаружить самые «тяжелые» запросы и оптимизировать их.
Переехать на более производительный сервер
Причиной долгого ответа сервера может быть недостаток производительности. Слабый процессор или малый объем оперативной памяти приводят к медленной работе или вовсе «падению» сайта, поэтому необходимо всегда оставлять потенциал для непредвиденных скачков нагрузки.
Не стоит размещаться на бесплатных хостингах, либо на хостингах с ограниченными возможностями. Позаботьтесь о будущем и используйте VPS либо выделенные серверы — это лучшее решение для масштабируемых проектов.
Использовать акселераторы PHP
Каждый раз при загрузке страницы сервер обрабатывает PHP-файлы, но часто при каждой загрузке выполняется один и тот же участок кода. Акселераторы PHP позволяют значительно уменьшить TTFB путем предварительной компиляции PHP-кода. Это уменьшит нагрузку на процессор, но потребует большего объема оперативной памяти.
Использовать серверное кэширование
При отсутствии кэширования страниц сервер генерирует запрашиваемую страницу при каждом обращении пользователя. Если кэшировать страницу целиком, при последующем обращении пользователя к файлу сервер не будет генерировать страницу заново, а отдаст пользователю уже сгенерированную страницу.
На тестовом сайте я настроил серверное кэширование страниц — время ответа сервера уменьшилось в десять раз.
TTFB с отключенным кэшированием:
TTFB с включенным кэшированием:
Вывод
Работайте над сокращением времени ответа сервера и не экономьте на производительности процессоров. Если ваш TTFB больше 200 мс, обязательно:
В результате можно уменьшить время ответа сервера в 5-10 раз.