Рано или поздно многим веб-мастерам, особенно новичкам, захочется или скорее всего даже придется оценить степень нагрузки на сервер своим сайтом или блогом, созданным на движке WordPress. Это может быть вызвано например тем, что владелец хостинга вдруг начинает вас забрасывать предупреждениями, что мол ваш сайт чрезмерно расходует выделенную для него память, слишком часто и многократно обращается к базе данных и тому подобное.
В большинстве случаев наиболее важными техническими характеристиками сайта, которые к сожалению могут доставить немало неприятностей, являются: объем расхода оперативной памяти скриптами, количество запросов к базе данных в короткие промежутки времени и время, потраченное для формирования динамических страниц. Последствиями, кроме претензий от админов хостинга, могут еще оказаться и недовольства посетителей вашего ресурса, а хуже всего вообще уменьшение посещаемости.
Так как же попроще и с меньшими затратами, не обладая особыми познаниями произвести оценку нагрузки на сервер вашим блогом или сайтом?
Оказывается все очень даже просто и доступно практически для всех, включая начинающих веб-мастеров. Разработчики WordPress уже об этом давно позаботились и снабдили свой движок полезными функциями. В частности это функции, которые нам в дальнейшем понадобятся:
get_num_queries()
— данная функция выдает количество запросов к базе данных, выполненных за время работы скриптов WordPress для генерации и выдачи динамической страницы блога;
timer_stop( $display = 0, $precision = 3 )
— эта функция возвращает количество времени (в секундах), затраченное для генерации страницы сайта;
— примеры ее использования:
timer_stop( 0, 3 ) — выдаст результат в виде 0,123;
timer_stop( 0, 5 ) — выдаст результат в виде 0,12345;
Ну и еще нам не помешает парочка родных функций PHP:
memory_get_usage ( void )
— функция возвращает объем памяти (в байтах), выделенной для PHP скриптов, использованных для генерации страниц сайта;
memory_get_peak_usage ( [ bool $real_usage = false ] )
— эта функция возвращает пиковое (самое наибольшее) значение объема памяти (в байтах), занятого функциями и данными PHP скриптов, использованных для генерации страницы сайта;
Параметр real_usage по умолчанию установлен в значение FALSE и его можно вообще не указывать, но при этом будет выдано количество памяти использованное функцией emalloc(). При установке real_usage в TRUE будет выдано значение объема памяти, полученное от системы.
Ну а сейчас, после краткого ознакомления с необходимыми нам функциями, мы можем написать небольшой код, который выведет количество SQL запросов к базе данных, затраченное на генерацию страницы время и память, использованную PHP скриптами.
Расход памяти: ' . round( memory_get_usage()/1024/1024, 2 ) . ' Mb'; if ( function_exists('memory_get_peak_usage') ) echo '
Пиковый расход памяти (реальный): ' . round( memory_get_peak_usage(TRUE)/1024/1024, 2 ) . ' Mb'; if ( function_exists('memory_get_peak_usage') ) echo '
Пиковый расход памяти (использован функцией emalloc()): ' . round( memory_get_peak_usage()/1024/1024, 2 ) . ' Mb'; ?>
Этот код теперь можно вставить в удобное для вас место вашей темы (шаблона). Лучший на мой взгляд вариант — это разместить его в «подвале» (footer, футере, нижней части страницы), основной код которого обычно расположен в файле footer.php в каталоге вашей темы (шаблона). Код оптимальнее будет разместить в самом конце «подвала», чтобы он был максимально ближе к закрывающему тегу BODY.
У вас конечно может появиться логичный вопрос:
— Почему созданный нами код оптимальнее размещать в «подвале» и тем более в самом его конце?
Ответ таков:
— Наш код, размещенный в самом конце «подвала», выведет наиболее актуальные данные, так как до его вызова уже будут выполнены все необходимые запросы к базе данных, закончат работу практически все функции WordPress и скриптов темы вашего блога, затраченные на генерацию страницы.
В итоге, получаемые данные о расходе ресурсов сервера вашим сайтом или блогом помогут оценить, насколько рациональным был выбор определенного хостинга и предоставляемых им ресурсов для вашего сайта. Благо, что в настоящее время многие хостеры дают кое-какое время на тестирование работоспособности сайта прежде, чем вы оплатите их услуги на длительный срок. Кроме этого, можно будет понять, стоит ли пробовать, к примеру, сменить установленные для блога плагины на альтернативные, которые потребляют меньше ресурсов или вообще удалить некоторые из них, чтобы уменьшить нагрузку на сервер. По статистике и на основе практики замечено, что дополнительную (а иногда чрезмерную) нагрузку на сервер в основном несут в себе некоторые установленные плагины, своеобразные темы оформления и разнообразные функции, добавленные в скрипты собственноручно. Во многих случаях снизить нагрузку на сервер может помочь установка плагинов или модулей сервера, которые обслуживают и обеспечивают кэширование. В таком случае возможно удастся избежать удаления или замены уже установленных и понравившихся вам плагинов и прочих самостоятельных модификаций.
Однако, мы кое-что упустили при создании скрипта для оценки нагрузки на сервер, не кажется ли это вам?
Да, если мы вставим созданный нами код в «подвал» блога, то его, к нашему сожалению, будут видеть все посетители сайта или блога, и этого нам конечно не хотелось бы допускать.
Так давайте сделаем так, чтобы статистику расхода ресурсов сервера видел ТОЛЬКО АДМИН блога, а всем остальным она не мозолила бы глаза. Для этого нам всего лишь понадобится добавить проверку уровня доступа пользователя к страницам сайта перед запуском нашего кода. Сделать это очень даже просто. Мы добавим в наш изначальный код всего лишь одно условие:
В результате наш законченный код будет выглядеть следующим образом:
Расход памяти: ' . round( memory_get_usage()/1024/1024, 2 ) . ' Mb'; if ( function_exists('memory_get_peak_usage') ) echo '
Пиковый расход памяти (реальный): ' . round( memory_get_peak_usage(TRUE)/1024/1024, 2 ) . ' Mb'; if ( function_exists('memory_get_peak_usage') ) echo '
Пиковый расход памяти (использован функцией emalloc()): ' . round( memory_get_peak_usage()/1024/1024, 2 ) . ' Mb'; } ?>
Для придания странице сайта более эстетического вида к полученному коду можно добавить немного стилизации, например так:
%d за %s секунд. '), get_num_queries(), timer_stop(0, 3) ); if ( function_exists('memory_get_usage') ) echo '
Расход памяти: ' . round( memory_get_usage()/1024/1024, 2 ) . ' Mb'; if ( function_exists('memory_get_peak_usage') ) echo '
Пиковый расход памяти (реальный): ' . round( memory_get_peak_usage(TRUE)/1024/1024, 2 ) . ' Mb'; if ( function_exists('memory_get_peak_usage') ) echo '
Пиковый расход памяти (функция emalloc()): ' . round( memory_get_peak_usage()/1024/1024, 2 ) . ' Mb'; ?>
В этом коде, если вы заметили, вставлены и CSS-параметры. Но не стоит, думается мне, с пренебрежением относиться к этому, и что совсем это выглядит «не по современному». Этим, с моей точки зрения, даже стоит воспользоваться, так как этот код будет доступен только админу, и мы в то же время не будем загромождать реальные CSS-файлы излишествами, которые не будут использоваться по прямому назначению.
И напоследок... Конечно можно было бы все выше изложенное реализовать в плагине, но для понимания самого процесса и простоты его реализации я не стал описывать здесь вариант с плагином. Однако парочку примеров по созданию относительно простых плагинов своими силами я выложу на этом блоге в ближайшее время.
Удачи всем и до новых встреч!
Метки: PHP, WordPress, функции
Спасибо.
Очень полезная статья .
Интересно, а будут ли статьи о нагрузке сайта Joomla на сервер хостинга?
Насколько я помню, в Joomla есть класс JProfiler для таких целей. Раз уж появился интерес, то я чуть позже напишу о нем и как им пользоваться на блоге.
Но тем не менее можно для Joomla использовать способ, который я описывал в статье «Объем памяти и время работы PHP скрипта» из рубрики «PHP».
Отличная статья. Сегодня обязательно воспользуюсь этим кодом на своем сайте. Автор ты отличный программист, и пишешь как хороший журналист. Спасибо за полезную статью. Побольше бы таких сайтов.
Отличная статья буду тестировать.