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

Всем привет, очень давно не публиковал новых статей, потому что занимался внутренней и внешней оптимизацией сайта. Накопившийся опыт и шишки набитые при создании блога, о них буду рассказывать вам постепенно, так сказать порциями. Сегодня же поговорим о том как уменьшить запросы к базе данных 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?

    Related Articles

    Back to top button
    Close

    Jaxx Wallet

    proda login

    wordpad download online

    wordpad download

    gem visa login

    Jaxx Wallet Download

    prodaonline.com.au

    Proda Login Australia

    Proda Login

    Trending Dance

    Email Separator

    email-separator.com

    gemvisalogin.com

    gem visa

    Solana Wallet

    solana-wallet.org

    Solana Wallet Download

    ">
    sinkronisasi reel pendek pola 4 6 spin yang sering mendahului scatter ketiga riset soft start ketika awal spin terlihat ringan tapi menyimpan momentum besar pola jam senja 18 30 20 30 aktivasi wild lebih rapat dibanding sesi lain deteksi visual micro flash efek singkat yang muncul tepat sebelum pre freespin analisis jalur simbol menyilang indikator non linear menuju burst bertingkat fenomena board padat simbol besar berkumpul sebelum tumble panjang terbuka studi turbo pendek mengapa 6 9 spin cepat lebih sering mengunci momentum perilaku reel awal saat reel 1 2 terlihat berat menjelang aktivasi multiplier pola recovery halus wild tunggal muncul setelah dead spin sebagai sinyal balik arah riset scatter tertahan ketika dua scatter bertahan lama sebelum ledakan aktual efek clean frame stabil layar terlihat bersih tepat saat rtp masuk zona seimbang analogi hujan gerimis tumble kecil berulang yang diam diam mengarah ke burst besar mapping ritme animasi perubahan tempo visual sebagai petunjuk pre burst pola jam malam 21 00 23 00 frekuensi multiplier bertingkat meningkat signifikan reel terakhir aktif aktivasi mendadak di reel 5 sebagai pemicu tumble lanjutan observasi spin manual kontrol ritme yang membantu membaca sinyal sistem deteksi low pay berpola ketika simbol kecil justru menjadi fondasi bonus studi pre burst senyap fase tenang 8 12 spin sebelum ledakan tajam jalur simbol turun naik gerakan dinamis yang mengindikasikan multiplier siap aktif blueprint sesi pendek strategi mengatur awal tengah spin agar momentum tidak terbuang reel tengah menguat pola sinkronisasi halus yang sering jadi awal scatter berlapis riset mini tumble ketika 3 tumble pendek berurutan jadi penanda bonus dekat kabut tipis di layar frame redup yang hampir selalu mengarah ke pre multiplier analisis pola jam 17 00 20 00 wild awal muncul lebih konsisten dari hari sebelumnya slide track tajam pergerakan simbol diagonal yang munculkan fase pre burst fenomena quiet board ketika 10 spin tenang justru memunculkan ledakan mendadak scatter luncur lambat indikator unik bahwa freespin akan terealisasi setelah 2 4 spin pola spin turbo ringkas efektivitas 7 turbo cepat dalam memicu tumble besar perubahan warna clean frame efek putih pucat yang jadi kode sebelum multiplier aktif riset simbol berat ketika high pay turun lebih banyak dari biasanya menjelang bonus analisis rotasi vertikal jalur simbol memanjang yang memperkuat potensi burst pola jam dingin 02 00 04 00 scatter sering bertahan lama sebelum akhirnya terkunci fs simulasi 3000 spin frekuensi wild grip muncul tinggi di pola malam hari reel 5 hyper active tanda bahwa sistem sedang mendorong momentum ke kanan analogi sungai tenang layar tanpa tumble yang justru menyimpan ledakan 2 3 putaran lagi frame gelap sesaat sinyal visual tipis sebelum scatter muncul berturut turut pola recovery wild ketika wild muncul setelah dead spin panjang sebagai pembalik keberuntungan mapping simbol rendah bagaimana low pay yang berulang bisa mengangkat probabilitas bonus reel bergerak serempak efek sinkronisasi singkat sebelum pre freespin sequence pola burst 3 lapisan ketika sistem memberikan tumble berjenjang yang mengarah ke ledakan utama