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

Что даст нам сокращение запросов к БД? Во-первых, мы значительно уменьшим нагрузку на сервер, во-вторых, в разы ускорим загрузку страниц сайта. Да потратив примерно час времени вы добьетесь колоссального успеха сразу в нескольких направлениях — оптимизируете, ускорите свой сайт, уменьшите нагрузку на ваш сервер.

Стандартные запросы к базе данных функциями WordPress

Для начала давайте поговорим о том, от куда же возникают запросы к базе в WordPress? Для того что бы понять что мы “вытаскиваем” с нашей базы данных давайте проанализируем некоторые данные:

  • Название сайта;
  • Описание сайта;
  • Ссылки на CSS файлы темы;
  • Параметры документа выводимые в теге head;
  • Вывод категорий, записей, меток.
  • При установке картинок шаблона также прописывается их местоположение с помощью функций WordPress и обращением к БД;
  • Формирование главного меню;
  • Другое;

Это текстовые данные которые извлекаются из базы путем вызова стандартной функции wordpress bloginfo () и других встроенных функций вызывающие запросы к базе данных WordPress. Вы даже представить себе не можете сколько раз используются функции на ваших страницах сайта, НА ВСЕХ СТРАНИЦАХ! А ведь все это можно с легкостью заменить на стандартный текст и внедрить непосредственно в шаблон, тем самым исключить огромное количество запросов.

ВНИМАНИЕ: если у вас нет хотя бы минимальных знаний html и PHP, настоятельно рекомендую сделать резервную копию сайта перед изменением кода. При обновлении темы все изменения скорее всего пропадут, по этому стоит задуматься о создании дочерней темы.

Правим и избавляемся от лишних запросов в header.php.

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

Скопировали? Отлично, теперь находим основной шаблон темы index.php открываем его для правки. Для наглядности я выбрал стандартную, новую тему twentyfifteen, которая появилась с выходом WordPress 4.4.

Открыв главный шаблон мы можем увидеть какие файлы подключает наша тема, и первым на что мы обращаем внимание это вызов функции get_header(), которая подключает нашу шапку сайта, файл header.php, именно к нему мы и обращаемся.

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

В первом же теге <html> встречается вызов функции language_attributes(), которая выводит значение языка установленного на вашем сайте, для того что бы избавиться от вызова этой функции нужно всего лишь заменить текущую функцию значением lang=”ru-RU “, после этого мы избавимся от одного запроса к БД на каждой странице вашего сайта.

Не будем останавливаться и идем далее, и следующее что нам попадается это строчка с указанием кодировки:

<meta charset=”<?php bloginfo( ‘charset’ ); ?>” >.

Строки выделенные после изменения у нас должно получиться следующее:

<meta http-equiv=”Content-Type” content=”text/html” ; charset=”utf-8″/>

Мы не только избавились от лишнего кода, но и добавили несколько необходимых параметров в header.

Далее мы встречаем строчку:

<link rel=”pingback” href=” <?php bloginfo( ‘pingback_url’ ); ?> ” >

Ее можно вовсе удалить она нам не нужна.

Идем дальше, и находим следующую строку:

<h1 class= ” site-title”><a href= ” <?php echo esc_url( home_url( ‘/’ ) ); ?> ” rel= ” home ” ><?php bloginfo( ‘name’ ); ?></a></h1>

Тут используется сразу две функции:

  1. Извлекается и добавляется URL сайта, то-есть ссылка на главную страницу;
  2. Выводиться название сайта.

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

<h1 class= ” site-title ” ><a href= ” mysite.ru ” rel=”home”>Название сайта</a></h1>

Этим действием мы “убили” еще два запроса.

Далее мы видим такой же код в теге <p>, который мы аналогично изменяем.

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

<?php endif;

$description = get_bloginfo( ‘description’, ‘display’ );
if ( $description || is_customize_preview() ) : ?>
<p class=”site-description”><?php echo $description; ?></p>

Все что нам нужно оставить из этого:

<?php endif;

 ?>
<p class=”site-description”>Описание сайта</p>

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

Возможные изменения в footer.php.

Теперь переходи к файлу footer.php, находим его в нашей теме, открываем и смотрим что нам можно тут исправить. В случае с темой twentyfifteen кроме как убрать лишние ссылки у меня править нечего, но в большинстве шаблонов в футере так же встречаются функции home_url() и bloginfo( ), которые можно так же заменять, как и в примере с header.php. Не забываем перед каждой правкой проверять значение параметра который установлен в функции и правильно заменять его на статическую информацию.

Конечно же вы можете сказать что в вашем шаблоне все совсем по другому и функции другие и строки иначе написаны, но поверьте, в WordPress в 99% случаев используют указанные функции в шаблонах. Если вы их не нашли в указанных мною файлах, значит поищите их в functions.php и других файлах, возможно они были вынесены именно туда. Естественно чем дальше от ссылки на функцию вы залезете в код тем больше вероятность его повредить, но вы всегда можете экспериментировать на локальном компьютере, как установить WP на локальный комп я уже рассказывал.

Проделав все необходимые замены вы избавитесь к примеру от 10 запросов к базе с каждой страницы сайта. А если подсчитать сколько у вас просмотров страниц в день да умножить это число на 10. Вывод можете сделать сами, нужны ли вам эти изменения или нет.

Для более продвинутых пользователей. Изменяем навигационное меню и сайт бар.

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

Навигационное меню и его изменение на статический вариант.

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

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

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

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

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

<div id=”secondary” class=”secondary”>

<?php if ( has_nav_menu( ‘primary’ ) ) : ?>
<nav id=”site-navigation” class=”main-navigation” role=”navigation”>
<?php
// Primary navigation menu.
wp_nav_menu( array(
‘menu_class’ => ‘nav-menu’,
‘theme_location’ => ‘primary’,
) );
?>
</nav>

И я хочу его заменить стандартным html фрагментом, который будет выводиться статически, без использования запросов к базе данных и обработки на сервере.

Я делаю следующие изменения:

  • Полностью удаляю весь PHP код;
  • Создаю список нужных мне страниц для навигации, создаю список;
  • Проставляю в списке правильные URL;
  • Внедряю список в код, смотрим результат.

<div id=”secondary” class=”secondary”>
<nav id=”site-navigation” class=”main-navigation” role=”navigation”>
<ul><li><a href=”https://yrokiwp.ru”>Главная</a></li>
<li><a href=”//yrokiwp.ru/lessons-wp/”>Уроки</a></li>
<li><a href=”//yrokiwp.ru/category/plaginyi/”>Плагины</a></li>
<li><a href=”//yrokiwp.ru/video-uroki-wordpress/”>Видео</a></li>
<li><a href=”//yrokiwp.ru/obratnaya-svyaz-yrokiwp/”>Контакты</a></li></ul>
</nav>

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

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

Сайдбар, что можно изменить и как это сделать.

С сайдбаром все немного проще чем с навигацией, дело в том, что нам не нужно полностью изменять и удалять код PHP, достаточно в шаблоне sidebar.php добавить html код, который будет отображать необходимые вам материалы в нужном месте.

Зачем нам это может понадобится? Ну к примеру у вас на блоге есть 5-7 рубрик, которые выводятся в сайдбаре и это отображается одинаково на всех страницах сайта. Так почему бы не сделать этот участок статическим и облегчить работу сервера?

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

  • Выведет ваш статический код с категориями;
  • Добавит настроенные вами виджеты ниже.

Если вам потребуется вставить код именно после конкретного блока сайдбара, тогда вам придется писать функцию самостоятельно.

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

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

Помните, уменьшив количество запросов к базе данных вы “убиваете сразу двоих зайцев” ускоряете загрузку страниц, снимаете нагрузку на сервер. Желаю удачи.