Оптимизация темы (шаблона) WordPress для снижения его нагрузки на сервер хостинга, плагин WP Tuner и число запросов к БД

22 Декабрь, 2009

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

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

Оптимизация темы (шаблона) WordPress


Сразу оговорюсь, что вопрос кэширования в Вордпрессе с помощью Hyper Cache я пока рассматривать не буду, поговорим об этом чуть позже (см. по ссылке). Без кэширования, конечно же, никак не получится прожить при высокой посещаемости, но не стоит полагаться только на это. Сама по себе нагрузка WP достаточно велика и с каждой новой версией его аппетиты все увеличиваются.

Но ведь другой, более достойной альтернативы движка (тут про разные CMS много полезного можно найти) для создания блога пока нет (попытки сделать есть, но все же это пока еще не то). Поэтому будем учиться ужимать аппетиты нашего любимого движка всеми доступными способами. А способов оптимизации достаточно много.

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

Поэтому, например, чтобы выводить в шапке (верхняя часть шаблона) название, необходимо в файле HEADER вашей темы прописать код на языке PHP, который запросит это название из базы данных и затем уже вставит его в код вебстраницы. Кстати, в базе данных название вашего ресурса появится только после того, как пропишите его в общих настройках Вордпресса.

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

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

Для начала вам нужно будет получить доступ по FTP к файлам вашей темы оформления. Они находятся в папке:

/wp-content/themes/название_вашей_темы_оформления

Начнем с уже упомянутого выше — HEADER. Думаю, что с Файлзилой вы уже знакомы и доступ по ФТП к хосту для вас не в новинку. Если нет, то вверху есть окно поиска и достаточно будет ввести туда слово «файлзила» или «нотепад», чтобы получить самую полную информацию по этим двум архиполезным программам.

В HEADER реализовано достаточно много обращений к базе данных, которые спокойно можно заменить на статичные данные или же вообще удалить. В самом верху вы, наверняка, увидите следующий участок кода :

<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />

Нет, удалять его, конечно же, не надо, но вот немного видоизменить, убрав не нужные обращения к БД, можно:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Ну вот, два запроса в минус — пустячок, а приятно. Дальше — больше. Что еще можно заменить или удалить в HEADER? Давайте перечислим:

  1. Удалить строку с информацией о номере установленной версии WordPress. Она не несет никакой полезной нагрузки и, более того, является опасной, т.к. некоторые варианты взлома применимы только к определенным версиям, а из этой строки как раз очень удобно узнавать текущую версию вашего движка. Выглядит эта строка обычно так:
    <meta name="generator" content="WordPress <?php bloginfo('version'); ?>" />
  2. Заменить URL до вашего файла таблицы стилей CSS в вашей текущей теме оформления на статический. В коде это строка:
    <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />
  3. заменить Урл до иконки favicon.ico на статический. Фавикон является очень важным атрибутом любого сайта (читайте об этом про приведенной ссылке) и манкировать им не пристало никому.

    У моего WP блога эта иконка имеет вид желтой лампочки. Если у вас еще нет FAVICON.ICO, то обязательно создайте ее и пропишите путь к ней в HEADER, но только статический (без обращений к БД). В оригинальном файле эта строка может выглядеть примерно так:

    <link rel="shortcut icon" type="image/ico" href="<?php bloginfo('template_directory'); ?>/favicon.ico" />
  4. Заменить путь до вашего фида на статический. Что такое RSS лента и для чего ее обязательно нужно использовать в Вордпресс, вы можете почитать по приведенной ссылке. А так же я уже писал про то, как правильно настроить RSS ленту в WordPress. В коде за это отвечает строка:
    <link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?> RSS Feed" href="<?php bloginfo('rss2_url'); ?>" />
  5. Заменить Урл до Pingback (рассылка сведений о вашей статье по всем адресам, которые вы в этой статье упомянули) на статический:
    <link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />

Откуда брать статические Урлы для замены PHP кода


А откуда взять все эти статические пути, которые мы должны прописать вместо динамического кода PHP? Есть довольно простой способ. Вам нужно всего лишь открыть любую вебстраницу вашего сайта в браузере и посмотреть ее исходный код.

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

Теперь ищите там нужные строки и копируете пути к файлу CSS, к фиду (RSS ленте) и т.п.

Дело в том, что движок при генерации вебстраницы, динамический PHP код, интерпретируется в Html теги. Вот именно их мы скопируем из исходного кода любой вебстраницы по очереди и вставим в HEADER вместо оригинальных участков. Вот так выглядело это безобразие до преобразования:

а после замены URL на статичные — так (как говорится — почувствуйте разницу):

Еще определенное количество обращений к базе Вордпресса в минус. Ну и, конечно же, то, о чем мы говорили в начале статьи. Найдите участки кода отвечающие за динамический вывод названия и описания вашего проекта:

<?php bloginfo('name'); ?>

и

<?php bloginfo('description'); ?>

Их нужно будет заменить, соответственно, на статические название и описание. Если у вас вдруг после сохранения этого вместо русских букв вылезут кракозябры (здесь читайте про кодировки русского языка и проблемы с ними возникающие), то откройте файл повторно на редактирование и в Notepad++ (тут его описание живет), выберите из верхнего меню пункт «Кодировка» — «Преобразовать в UTF-8 без BOM», а затем опять сохраните файл.

Если у вас еще в HEADER имеется описание верхнего меню, то там можно вручную прописать ссылку на главную страницу, заменив динамический код для формирования этой ссылки. В оригинале эта строка кода может выглядеть так:

<a href="<?php echo get_option('home'); ?>/">Главная</a>

ее надо будет заменить на:

<a href="http://ktonanovenkogo.ru/" >Главная</a>

Теперь перейдем к файлу FOOTER, который так же должен находиться в папке с вашей темой оформления по адресу:

/wp-content/themes/название_вашей_темы_оформления

В нем можно заменить строку выводящую информацию о том, что все права защищены, примерно такого вида:

<p class="alignleft">&copy; <?php echo date("Y"); ?>  <?php bloginfo('name'); ?>  Все права защищены <br />

на что-нибудь такое, например:

<div class="description">&copy; KtoNaNovenkogo.ru, 2009-2013 | Все права защищены</div>

Ну и еще посмотрите, что в FOOTER, по аналогии с описанным выше, можно еще модернизировать. У меня, например, там дублируется верхнее меню и, следовательно, я так же как и в первом случае заменил динамический участок кода, описывающий ссылку на главную страницу, на статичный URL.

WP Tuner — количество запросов к БД Вордпресса


Для того, чтобы проверить, сколько же обращений к базе данных происходит при загрузке той или иной вебстраницы вашего блога, вы можете использовать известный плагин WP Tuner, который можно скачать — здесь.

WP Tuner устанавливается на WordPress стандартным способом, а именно:

  1. распакуйте архив, используя ftp-менеджер подключитесь к вашему блогу и загрузите папку wptuner в папку с плагинами wp-content/plugins/ на сервере хостинга
  2. войдите в админку и выберете вкладку «Плагины»- «Inactive»
  3. найдите строку с плагином WP Tuner и активируйте его

Если при установке плагина WP Tuner у вас возникли какие-либо затруднения, то можете обратиться к материалам этой статьи, про решение возможных проблем с установкой плагинов. Теперь можно зайти в админку и ознакомиться с настройками этого расширения (из левого меню выбрать Параметры -> WP Tuner.

Собственно, настроек у WP Tuner не так уж и много, к тому же для того, чтобы данный плагин начал показывать количество запросов к БД при загрузке страницы, вообще ничего менять не надо. Нужно просто зайти на блог, но при этом нужно, чтобы вы были под логином администратора, и открыть какую-либо страницу.

После окончания ее загрузки прокрутите ее вниз и увидите под футером окно этого расширения. На рисунке приведенном ниже показано, где можно посмотреть число обращений к базе данных, которое было произведено.

Обычные посетители блога, естественно, этого безобразия, внесенного WP Tuner, видеть не будут, только администратор, т.е. вы.

Но посмотреть число запросов к базе в WordPress можно и не прибегая к услугам плагинов. Для этого нужно получить доступ к файлам вашего блога по FTP и открыть на редактирование, например, файл:

/wp-content/themes/название_вашей_темы_оформления/footer.php

и где-нибудь в его содержимое нужно вставить следующую конструкцию (место вставки будет определять область вывода числа запросов к БД в футере):

<?php if (is_user_logged_in()) { ?>
    <?php echo get_num_queries(); ?> queries in <?php timer_stop(1); ?> seconds.
<?php } ?>

В результате после загрузки страницы, в самом низу (в области подвала), вы увидите, сколько при этом было сделано обращений к БД:

Эта информация будет доступна только авторизованным пользователям. Т.о., если у вас на блоге регистрация отключена, то эту надпись будете видеть только вы.

Удачи вам! До скорых встреч на страницах блога KtoNaNovenkogo.ru

Еще:

Рубрики :Основы WordPress

Комментарии и отзывы

sup3rstar

Admin, у тебя PHP WP код полностью не видно, те если сточка из кода длинная, то видна она не целиком.

Nick Lavu

Спасибо, в ближайшем будущем буду пробовать. А пока нагрузки от вордпресс как таковой нет.

Sosnovskij

Спасибо за плагин WP Tuner

Алина

Больше всего нагрузку давала на память функция «Самые популярные посты»

Дмитрий

Алина: согласен, у меня тоже самое. Оптимизация нагрузки заключается еще и в отключении не самых необходимых плагинов вордпресс.

andrey

Почему-то миф уменьшении нагрузки ручным прописыванием настроек блога в теме оформления кочует из блога в блог. Но (выше написал Nick Lavu) большая часть настроек WP блога извлекаются одним запросом — из таблицы wp_options. А вот некоторые плагины, или экзотические темы, могут быть создавать повышенную нагрузку и в целях оптимизации их следует отключить.

Snezok

Спасибо за пост! Для меня все эти вопросы оптимизации вордпресс и снижения нагрузки на сервер, очень актуальны а описания по замене строчек в теме WP ранее не встречал. Буду экспериментировать 😉

Игорь

Я в последнее время на новых проектах стараюсь отказываться от вордпресс — т.к. чуть посещалка увеличивается — начинают возникать проблемы с нагрузкой на сервер, особенно когда на одном хостинг аккаунте не один такой сайт.

Сейчас смотрю в сторону MaxSite CMS — очень хорошая блоговая система я считаю — последнюю неделю разбираюсь с ней — пока все нравиться. Что качается потребления ресурсов сервера (нагрузки) — просто сказка — в несколько раз меньше памяти жрет и запросов к базе данных по минимум.

По мне так — основной конкурент вордпресс.

Дмитрий

Snezok: пожалуйста.

Игорь: слышал про MaxSite CMS, но пока еще не довелось попробовать. Возможно, что вы и правы. Вордпресс действительно достаточно монструозный движок и создает большую нагрузку на сервер хостинга, но очень уж популярный и что немаловажно, для него имеется огромное количество плагинов, которые позволяют реализовать кучу возможностей. К тому же WordPress можно оптимизировать для снижения нагрузки на сервер. А MaxSite CMS, я думаю, пока что, из-за ее относительной не распространенности, расширений много иметь не может. Или я ошибаюсь?

cava150

добрый день!

я бы хотел чуток добавить по поводу снижении нагрузки WP на сервер.

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

Аркадий

Скажите, а где ещё может быть запрятан мета-тег с информацией о версии WordPress. Просто ни в хидере, ни в остальных файлах темы не нашёл строку такого вида:

<meta name="generator" content="WordPress <?php bloginfo('version'); ?>" />
, однако в информации о странице всё равно видна версия WP. Или может быть этот тег по другому объявлен?

Дмитрий

Аркадий: еще об этом не писал, но обязательно напишу, а пока, если кратко, то для удаления информации о текущей версии WordPress из исходного кода страниц вам нужно будет добавить в файл functions.php из вашей темы оформления (/wp-content/themes/название-вашей-темы-оформления/functions.php)

строку:

remove_action( 'wp_head', 'wp_generator' );

Аркадий

Дмитрий: спасибо, помогло.

Марина

Спасибо, Дмитрий. Блестящая серия статей по оптимизации WordPress, но есть вопросы. Плагин WP Tuner при переходе из админки на сайт не показывает количество обращений к базе данных в футере, а показывает это в самом плагине, но непонятно к какой странице блога. Подскажите, пожалуйста, в чем дело.

Дмитрий

Марина: WP Tuner отображается на страницах блога и в админке под футером. Но на страницах блога его панель будет видна только администратору вордпресс. Обычные посетители его не увидят. Рискну предположить, что возможно вы заходили на сайта не под админом, хотя, наверное, это вряд ли.

Марина

Заходила в WP админом, сейчас удалила плагин WP Tuner, прописала в коде футера и все получилось. Число обращений на разных страницах от 14 до 25. Это нормально?

Андрей

Плагин суперкеш рулит для оптимизации и снижения нагрузки в WordPress, если у вас много трафика, то после установки этого плагина вы получите почти статичный сайт...

CyberMax

А ещё вот есть Really Static такой плагин для WordPress, говорят что это даже лучше.

Nmaes

Wanderfuul sites

Xvorb

Спасибо. Сайт полетел в закладки.

Одесский Бомж

Большое спасибо. Статья помогла в оптимизации как блога, так и одного портальчика, которому явно подобная оптимизация не помешает!

Негодующий налогоплательщик

Настроил всё по описанию, обращений к базе данных как было 56, так и осталось. Убрал слайдшоу из сайдбара, обращений уменьшилось до 42. И теперь так и плавает — то 57, то 42, не пойму. Обращения проверяю при помощи кода, установленного в подвале:

id == 1 ) {

echo " MySQL: " . get_num_queries () . " запросов за "; timer_stop (1);

echo " секунд. Потребление памяти: ". round (memory_get_usage ()/1024/1024, 2) . " MB ";

var_dump ($GLOBALS['wpdb']->queries);

}

?>

Негодующий налогоплательщик

Сделал всё как написано в статье. Результата не дало — обращение к базе данных не уменьшилось. 56. Убрал из сайдбара слайд шоу — кол-во обращений уменьшилось до 42. Но потом опять возросло до 57. И так и колеблется — 42-57.

Алексей

Огромное спасибо. Читал несколько блогов на эту тему и нифига не понял. А тут всё понятно и ясно объясняется. Всё исправил у себя, хотя не могу убрать ссылки, что в футере на сайт вордпрес, они по защитой. Может подскажешь как эту защиту снимать?

Юрий

Вроде уж написано кем то выше.

Замена строчек php кода на статически прописанные пути в давнном случае, НЕ снизит количество запросов к БД, по той простой причине, что запросы идут совсем из другого файла. Хуже от таких манипуляций не будет, но и эффекта это не даст...

Альберт

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

wel

Жалко, что автор не указал откуда в вордпрессе такое количество запросов?

30 queries in 0,344 seconds

И это на дефолтной теме

А когда необходимые плагины включаем, то вообще:

52 queries in 1,149 seconds. — http://wel.org.ua/

сергей

Елки-палки, если не помогает прописывание путей в файле шаблона, нафига писать об этом в статье. А то я сделал, проверил через wp-tuner — запросы не уменьшились, почитал комменты и понял в чем дело.

smfanton

При установке плагина сайт полностью виснет!

помогает только удаление его из ftp

Виктор

Спасибо за вп-тюнер)) чуть инфаркт не хватил)) Удалите его лучше из статьи, он убивает блог напрочь. Помогает только удаление его по фтп и замена wp-config (который находится в корне сайта) на оригинальный

dgz

Мететег meta name="generator" не всегда есть в шапке сайта (head). Удалить его или изменить легко: в wp-includes находите version.php и в самом начале или правите версию на любую несуществующую или удаляете всю строчку $wp_version = ’1.1.1′;

Павел

Удалите, пожалуйста, из статьи плагин вп-тюнер. Я чуть в штаны не наклал, когда сайт сломался. Благо, я уже сталкивался с корявыми плагинами, которые ломают сайт. Удалял по ftp.

Уберите плагин из статьи. Незнающий человек сломает свой сайт, и всё, и сделать ничего не сможет.

Подписаться не комментируя