Оптимизация WordPress

Рубрика: WordPress - Статьи по CMS

Здравствуйте, уважаемые посетители сайта okITgo.ru! Решил поделиться своими небольшими знаниями того, как можно оптимизировать WrodPress и какие меры я предпринял, в частности, на своем блоге для ускорения загрузки страниц. Читателям, использующим WP наверняка все это известно, но тем не менее, хочу рассказать, что я сделал для достижения этой цели.


Настройка Мониторинга Процесса Генерации Страницы Сайта

Напомню, что движок WordPress, как собственно и практически все остальные cms (Joomla!, DLE и другие) хранят часть информации в базе данных MySQL и при генерации страницы происходит ряд запросов к БД для извлечения этой информации (название сайта, различные URL-адреса, текст статей и т.п.). Естественно, на осуществление запросов к базе данных тратится время. Чтобы посмотреть, сколько sql-запросов делается при генерации определенной страницы и какое время занимают эти запросы, можно воспользоваться встроенными функциями WordPress:

  • get_num_queries(); – возвращает количество запросов к бд при генерации страницы
  • timer_stop( $display = 0, $precision = 3 ); – возвращает ($display = 0) / выводит ($display = 1) время осуществления запросов к бд при генерации страницы с точностью $precision знаков после запятой

Таким образом, если в шаблоне FOOTER, например в самом низу, прописать код:

<?php if (current_user_can(‘level_10′)) {
echo ‘<p>’.get_num_queries() . ‘ queries in ‘ . timer_stop(0,3) . ‘ seconds</p>';
} ?>

то при открытии какой-либо страницы (при входе под админом, что проверяет функция “current_user_can”, 10-й уровень привилегий как раз админский) внизу будет добавляться параграф с информацией о количестве запросов к бд и за какое время эти запросы были сделаны при генерации этой страницы. Конечно функцию current_user_can можно убрать, но тогда данная информация будет выводиться для любого, открывшего страницу вашего сайта.

Кстати, за одним можете также добавить вывод потребления памяти, дописав следующий код:

if ( function_exists(‘memory_get_usage’) )
  echo round(memory_get_usage()/1024/1024, 2).’mb';

Т.е. в итоге код мониторинга будет такой (я еще немного отформатировал вывод, чтобы информация выводилась в виде строки 10 / 0.738 / 25.89mb, здесь 10 – количество запросов к бд, 0.738 – количество секунд осуществления запросов, 25.89mb – потребление памяти):

<?php if (current_user_can(‘level_10′)) {
 echo “<p>”;
 printf((‘%d / %s’),
  get_num_queries(), timer_stop(0, 3));
 if ( function_exists(‘memory_get_usage’) )
  echo ‘ / ‘.
  round(memory_get_usage()/1024/1024, 2) . ‘mb ‘;
 echo “</p>”;
} ?>

Превращаем Генерируемые Сведения о Сайте в Статические

Итак, мониторинг настроили. Теперь откроем какую-нибудь страницу блога и запомним (или запишем, чтобы не забыть) значения количества запросов к БД и время, чтобы ощутить эффект от проделывания описанных далее операций.

Теперь убраем лишние запросы к базе данных MySQL, которые извлекают статичную для вашего блога информацию. Как правило, такие запросы присутствуют в шаблонах HEADER и FOOTER. Для этого, открываем шаблон HEADER (лежит в поддиректории движка “wp-content\themes\<ТЕМА>\”, где <ТЕМА> означает название папки с текущей темой) и смотрим, есть ли в нем запросы следующего типа (далее идет таблица, слева указан исходный код, в середине описание – где нет – значит точно не знаю, справа – статичный кусок HTML кода, на который данный фрагмент можно заменить, в качестве примера указано значение для моего блога):

Исходный код (с запросом к MySQL) Статичный html код, на который можно заменить Пример
<?php bloginfo(); ?> НАЗВАНИЕ БЛОГА okITgo.ru
<?php bloginfo(‘name’); ?> НАЗВАНИЕ БЛОГА okITgo.ru
<?php bloginfo(‘description’); ?> ОПИСАНИЕ БЛОГА Информационные технологии, интернет, веб программирование, IT, Hi-Tech, …
<?php bloginfo(‘admin_email’); ?> EMAIL АДМИНИСТРАТОРА admin@okITgo.ru
<?php bloginfo (‘url’); ?> АДРЕС САЙТА http://okITgo.ru
<?php bloginfo (‘wpurl’); ?> АДРЕС WORDPRESS-БЛОГА http://okITgo.ru
<?php bloginfo (‘stylesheet_ directory’); ?> ДИРЕКТОРИЯ СО СТИЛЯМИ http://okITgo.ru/wp-content/themes/<ТЕМА>
<?php bloginfo (‘stylesheet_ url’); ?> ПУТЬ К ТАБЛИЦЕ СТИЛЕЙ (URL) http://okITgo.ru/wp-content/themes/<ТЕМА>/style.css
<?php bloginfo (‘template_ directory’); ?> ДИРЕКТОРИЯ СО ШАБЛОНАМИ http://okITgo.ru/wp-content/themes/<ТЕМА>
<?php bloginfo (‘template_ url’); ?> ПУТЬ К ШАБЛОНАМ http://okITgo.ru/wp-content/themes/<ТЕМА>
<?php bloginfo (‘atom_url’); ?>   http://okITgo.ru/feed/atom
<?php bloginfo (‘rss2_url’); ?> RSS ЛЕНТА http://okITgo.ru/feed
<?php bloginfo (‘rss_url’); ?>   http://okITgo.ru/feed/rss
<?php bloginfo (‘pingback_ url’); ?>   http://okITgo.ru/xmlrpc.php
<?php bloginfo(‘rdf_url’); ?>   http://okITgo.ru/feed/rdf
<?php bloginfo (‘comments_ atom_url’); ?>   http://okITgo.ru/comments/feed/atom
<?php bloginfo (‘comments_ rss2_url’); ?> RSS ЛЕНТА КОММЕНТАРИЕВ http://okITgo.ru/comments/feed
<?php bloginfo(‘charset’); ?> КОДИРОВКА САЙТА UTF-8
<?php bloginfo(‘html_type’); ?> ТИП HTML text/html
<?php bloginfo(‘language’); ?> ЯЗЫК okITgo.ru
<?php bloginfo (‘text_ direction’); ?> НАПРАВЛЕНИЕ ТЕКСТА ltr
<?php bloginfo(‘version’); ?> ВЕРСИЯ ДВИЖКА 3.2.1

Если у Вас включен плагин “Exec-PHP” (в будущем напишу отдельную статью про этот полезный плагин, позволяющий добавлять php-код в статьи, страницы и текстовые виджеты), то чтобы выяснить статические значения для вашего сайта, можете создать тестовую статью следующего содержания: просто скопируйте код в буфер обмена и вставьте его в html-редакторе при создании записи в админке.

После опубликования, просмотрите данную статью – будут указаны значения для вашего сайта. Также эти значения можно посмотреть и в исходном коде страницы, но для этого надо иметь представление об устройстве страницы, как правило, у практически любой страницы WordPress сверху идет HEADER, снизу FOOTER, так что открываем исходный код, сопоставляем шаблоны с исходным кодом и находим статические значения, на которые меняем генерируемые участки в шаблонах.

Далее по аналогии меняем генерируемые участки на статичные в шаблоне FOOTER. В принципе с этим этапом все, главное имейте в виду, если теперь Вы поменяете одну из настроек сайта в админке, например, название сайта, то это не отразится на страницах блога – надо будет менять статичное значение в шаблонах. Но подобные изменения для устоявшегося сайта довольно редки.


Проверка Результата Оптимизации WordPress

Теперь проверяем результат: открываем страницу, для которой записали количество запросов к бд и время, которое на эти запросы ушло, и сравниваем новые значения с записанными до проделывания оптимизации: количество запросов должно уменьшиться, как и время.

Наконец, отмечу, что существует еще множество методов, как можно оптимизировать WordPress, например, снижение потребления памяти, настройка кэширования и т.п., но об этом я расскажу в следующий раз. Спасибо за внимание! До новых встреч на страницах сайта okITgo.ru.

Отзывов (4) на «Оптимизация WordPress»

  1. Arthur пишет:

    Все это не работает с bloginfo! Реально покажи скрин до и после. Там занимаюсь оптимизацией и после проделываний всего, что написано выше – не работает.

  2. Николай пишет:

    Очень интересная и полезная информация.
    Вот только нельзя просто копировать и вставлять в Футер.php – проблемы с кодировкой. А если набрать ручками в Нотпаде++ как надо, то очень хорошо получается.
    Спасибо!

  3. Елена пишет:

    Полезная инфа, а я как раз сейчас занимаюсь ускорением блога и обязательно воспользуюсь вашими советами. Спасибо!

Ваш отзыв