Понижение нагрузки сайтов, сделанных на WordPress, путём оптимизации запросов к базе данных.

Повышение производительности сайтов на WP
Небольшое отступление от темы. С момента публикации последней статьи, прошло 25 дней. Что нового приключилось за этот месяц? Суровый Ноябрь отравил жизнь – отправив множество проектов под санкции поисковой системы Yandex. Этот веб-проект полетел туда же, о чём я ранее уже писал где-то в комментариях. Я обещал вернуть всё на свои места – и сдержал своё обещание. Сайт снова полностью здоров, как и все остальные мои веб-проекты. Не факт, но возможно напишу в ближайшем будущем об этом отдельную, подробную статью, в которой выдам ценные указания.

О нагрузке и об оптимизации поговорим теперь. О плагинах кеширования и прочей ерунде, пережёвывать в тысячный раз не буду, как это делают все блоггеры – напишу то, о чём не написали другие. Недавно я арендовал для свежей группы проектов VPS-сервер. Сайтов – 4 штуки, суммарная посещаемость которых составляет около 1400 юзеров в сутки, а также около 3000 хитов (просмотров). Решил взять консультацию в службе поддержки компании Inferno, по поводу того, какой тариф мне лучше брать, вот снимок с экрана, на котором виден отрывок нашего диалога:

Wordpress тяжёлый движок

Тут я впал в лёгкий ступор. WordPress очень тяжёлый движок? Слышу не в первый раз. Но почему? Все мои сайты, созданные на движке WordPress летают словно соколы (это я загуглил только что, специально ради метафоры, поскольку не знал какую птицу употребить 😀 Оказывается, самая молниеносная в мире птичка это сокол Сапсан, он скорость развивает около 100 метров в секунду, что больше чем 320 км/час).

Не понравилось мне, что меня хотят подсадить на тариф как можно выше. Недружелюбно это чтоли, отнюдь не позитивные эмоции вызывает сие действо. Хотя ничего плохого про Inferno Solutions сказать не могу, по отзывам – отличные ребята. Но этот рекомендуемый Premium, стоит 600 рублей в месяц + панель к нему еще $5 (150 рублей в месяц) + доп услуги всякие и будет свыше 1000 рублей в месяц. А деньги я привык считать, растрачивать попусту доллары не в моём стиле. Поэтому, решил положиться на свои знания и взять идентичный выбранному мной тарифу VPS, но у другой компании, тоже с приличной репутацией.

Каков итог? Всё нормально работает, средняя нагрузка (Load Average) колеблется от 0.01 до 0.05. Тогда зачем мне рекомендовали тариф на две головы выше? Тут я вижу два варианта – хотели побольше денег срубить с клиента, либо не знали, что WordPress можно отлично оптимизировать. Что он может быть отнюдь не тяжёлым движком, а наоборот, лёгким, и даже реактивным.

Снижение нагрузки, оптимизация движка WP.

В движке WordPress, моментов для оптимизации кода, целый океан. Дело в том, что изначально код разработчиками шаблонов всегда составляется универсально – так, чтобы всё работало на любом сайте, при любой кодировке, при любых условиях. Именно поэтому движок Wordress создаёт серьёзную нагрузку – ведь за любой мелочной информацией, за любым условием он тянется в базу данных. Отсюда возникают повышенные требования и дорогие тарифы у хостинг-компаний. Но мы ведь не ламеры, нет! Мы умеем и любим оптимизировать :) Мы подстроим код шаблона индивидуально под каждый сайт и пропишем всю необходимую для функционирования информацию и условия сразу же, в html-виде! Удалим к чертям ненужные запросы, снизим нагрузку в разы!

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

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

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

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

php-запрос для получения кодировки сайта

Данный код выполняет запрос к базе данных, чтобы получить информацию об актуальной кодировке. Откройте любую статью своего сайта в виде html-кода и посмотрите, какая установлена кодировка. К примеру, у меня используется кодировка UTF-8. Я удалил этот запрос к БД и прописал вместо него сразу ту актуальную строчку в html, которую после всех операций выдаёт сервер:

кодировка UTF-8

Так нужно сделать со всеми запросами, которые вам будут встречаться и которые можно легко заменить на обычный html. Переменные wp_title и некоторые другие заменить простыми html-строчками не прокатит, почему? Потому что они несут в себе уникальную информацию о текущей странице. То есть в html-виде они будут разные для каждой отдельной статьи, а значит php-запрос действительно необходим и удалять его не следует.

Актуальны для удаления запросы, которые используют универсальную для всех страниц информацию. К таковой относятся – кодировка сайта, о ней я уже написал выше. Часто запросы используют адрес вашего сайта – ищите переменные по типу home_url и редактируйте код, удаляя эти запросы и прямо прописывая свой url. Часто, присутствует запрос, который инклудит форму поиска (search.php) – аналогично header.php, просто скопируйте содержимое шаблона поиска и подставьте вместо запроса голый html/javascript.

Если не можете сориентироваться сами, что необходимо прописать вместо запроса – всегда смотрите html-код страницы, он выдаёт готовый вариант, который отдаётся сервером, вам остаётся только найти нужное место, скопировать кусок html-кода и вставить вместо запроса. В каждой теме используются стили css. Обычно для указания пути к таблицам css, используется дополнительный запрос, который опять-таки создаёт лишнюю, бесполезную нагрузку, как раз-таки в нём и используется переменная home_url. Удаляйте запрос, в кавычках прописывайте полный адрес к файлу стилей.

По аналогии с header.php, файлом single.php используются и другие вставки – например sidebar.php и footer.php. Удаляйте и эти два запроса, вместо них целиком копируйте и вставляйте в файл single.php их содержимое. Убрав вставки кода с других файлов из single.php, мы уничтожим сразу три запроса к другим файлам сервера, а это уже само по себе замечательно. Можно еще и comment_template прямо в single.php забабахать, будет уже минус четыре инклуда :)

В среднем, при оптимизации нагрузки, с WordPress-сайта удаляется не менее 10 запросов – это только при чистке одиночной записи и сопутствующих вставок с соседних файлов шаблона. Можно чистить конечно и все остальные шаблоны – категории, главную страницу, архивы и так далее, но это уже не даст такого мощного эффекта, хотя и не будет лишним, особенно если сайт популярный. Если тема громоздкая и многофункциональная – она содержит в себе более 100 лишних запросов, которые создают суровую нагрузку.

Конечный результат оптимизации запросов.

Чтобы простые смертные, которые особо не разбираются в тонкостях web-программирования, смогли оценить эффект от проделанной выше работы, объясню попроще. Предположим, что мы оптимизируем сайт, посещаемость которого равна 1000 человек в сутки или 2500 просмотров. Каждый просмотр заставляет ваш сервер выполнять все эти запросы, о которых выше шла речь. Удалив 10 лишних запросов, что мы получим в итоге? 2500 * 10 = 25000 запросов. То есть выполнив вышеуказанные действия, мы сократим количество запросов к нашему серверу в сутки на 25000, а в месяц почти на миллион (минус 750 000 лишних телодвижений).

Результат истинно превосходный. Именно поэтому, я позволил себе использовать дешёвый приём в начале статьи – ДО и ПОСЛЕ 😀 Думаю простительно, ведь я искренне предоставил здесь рабочую эффективную схему, к тому же абсолютно бесплатно.

P. S: А у вас когда-нибудь были ситуации, что хостер отключал сайты за повышенную нагрузку? Или может быть срочно предлагал перейти на тариф выше? :)

Расшарить запись
Читайте ещё статьи по теме:
- Внутренняя и внешняя поисковая оптимизация сайта
- SEO текста, оптимизированные статьи для сайта
- Продвинуть сайт в топ за счёт внутренних ссылок
- Оптимизация и продвижение сайта в поисковых системах Google и Yandex
- Создание WordPress сайта, внутренняя оптимизация и продвижение в поисковых системах
- Правильно настраиваем и оптимизируем WordPress
- Как не попасть под фильтры поисковых систем

Что думаете?
  1. Евгений

    Да, постоянные проблемы и споры со службой поддержки из-за нагрузки :( Отредактировал у себя single.php файл в шаблоне, большое спасибо, респект!

  2. Прагматик

    Во, таких статей побольше, капитан :) Для Joomla и DLE планируешь написать что-то подобное?

  3. Happy.Cap

    Прагматик, подозреваю, что по аналогии с WordPress, можно делать то же самое с DLE и Joomla, поэтому необходимости писать отдельно нет. Да и не работаю я с другими движками, чтобы писать тонкости настройки и оптимизации, нужно изучать – нет времени и желания, да и незачем :)

  4. Djalin

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

    Статья полезная, жаль мало читают…

  5. Ruslan

    Я немного не понял, весь код нужно скопировать из header.php и вставить в single.php и в какое место ?

  6. Happy.Cap

    Вместо php-запроса подгружающего его: get_header().

  7. ираида

    “По аналогии с header.php, файлом single.php используются и другие вставки – например sidebar.php и footer.php. Удаляйте и эти два запроса, вместо них целиком копируйте и вставляйте в файл single.php их содержимое” – это не работает, не вводите в заблуждение.

  8. Happy Cap

    Ираида, почему же нет?

  9. Роман

    А поскажите, я вот не знаю языков и начал недавно пробовать себя в веб строительстве. Использую в вордпресс – шаблон-конструктор, в нем на много больше файлов, чем в обычном шаблоне, но проверял скорость загрузки страницы, она вполне приличная. Может ли такой шаблон сильно негативно сказываться на продвижении? Спасибо!

  10. Happy.Cap

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

  11. Александр

    Добрый день! Написал Вам в скайп вопрос. Вот жду ответа уже 2ю неделю (

  12. Vadim

    Спасибо за полезную и интересную информацию. Продвижение сайтов и оптимизация дает возможность повысить их ранжирование в поисковиках, а, следовательно, увеличить посещаемость. Наращивание количества посещений обязательно приводит к увеличению продаж, расширению клиентской базы и возрастанию доходов. Раскрученный сайт – это работающий на вас ресурс, а не просто страничка в интернете: topmayseo.ru