В центре внимания
Интернет-журнал СЕТЕВИК

Как уменьшить количество запросов к базе данных в WordPress?

04.12.2019 4:51

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


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

Навигация по странице:

  • Стандартные запросы к базе данных функциями WordPress.
  • Правим и избавляемся от лишних запросов в header.php.
  • Возможные изменения в footer.php.
  • Для более продвинутых пользователей. Изменяем навигационное меню и сайт бар.
  • Навигационное меню и его изменение на статический вариант.Для более продвинутых пользователей. Изменяем навигационное меню и сайт бар.
  • Сайдбар, что можно изменить и как это сделать.

Стандартные запросы к базе данных функциями 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>

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

  • Извлекается и добавляется URL сайта, то-есть ссылка на главную страницу;
  • Выводиться название сайта.
  • Так как мы работаем непосредственно с одним сайтом и подгоняем наш шаблон конкретно под наш сайт, значит мы знаем эти параметры и можем их заменить:

    <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=»http://yrokiwp.ru»>Главная</a></li>
    <li><a href=»http://yrokiwp.ru/lessons-wp/»>Уроки</a></li>
    <li><a href=»http://yrokiwp.ru/category/plaginyi/»>Плагины</a></li>
    <li><a href=»http://yrokiwp.ru/video-uroki-wordpress/»>Видео</a></li>
    <li><a href=»http://yrokiwp.ru/obratnaya-svyaz-yrokiwp/»>Контакты</a></li></ul>
    </nav>

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

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

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

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

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

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

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

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

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

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

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

    Рекомендую почитать:

    • Как создать и подключить фавикон в WordPress?
    Читайте также
    Редакция: | Карта сайта: XML | HTML