Memcached для кэширования объектов и страниц WordPress

Ускорить работу сайта можно по разному. Либо, перенести его на более мощный сервер, либо оптимизировать программное обеспечение существующего. Последний вариант позволит улучшить производительность не меняя «железо». В этой статье я расскажу как использовать сервер (сервис, службу) memcached для ускорения сайта на WordPress.

Я воспользуюсь возможностями сервера memcached с помощью плагинов и для кеширования объектов, и для кеширования страниц (записей) сайта.

Самый быстрый веб-сервер

Будет хорошей практикой использовать NGINX в качестве веб-сервера, как самостоятельно, так и в паре с Apache. «Голый» Apache при большом количестве посетителей не выдерживает никакой критики по скорости работы и нагрузочной способности.

Связка NGINX плюс Apache является достаточной для большинства сайтов. Но если ваш сайт работает на PHP, то можно еще немного его ускорить используя только NGINX и режим PHP-FPM.

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

Самый быстрый PHP

Новые версии PHP работаю быстрее. Особенно заметна разница между PHP 5.X и PHP 7.X — https://habr.com/ru/company/mailru/blog/326696/. Поэтому по возможности используйте самую свежую версию PHP.

Не забывает про PHP акселераторы для PHP 5.X. В PHP 7.X по-умолчанию уже подключен Zend OPcache и ничего дополнительно делать не надо.

Кэш наше всё!

Если все вышеперечисленное вы уже используете, а скорости все равно не хватает, то вам поможет кэширование.

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

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

Memcached для кэширования объектов

Memcached является одним из самых быстрых и популярных средств для кэширования произвольных данных в оперативной памяти.

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

Memcached работает гораздо быстрее чем MySQL, и потребляет гораздо меньше памяти. Но он не умеет обрабатывать сложные запросы, поэтому полностью заменить базу данных сервером Memcached в WordPress невозможно.

Стандартное кеширование объектов в WordPress

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

Сервер Memcached помогает решить эту проблему и сделать объектный кэш постоянным. Это значит, что такие данные как опции сайта WordPress, пользователи, термины, записи, мета-данные и прочее, можно сразу получать из хранилища Memcached в обход базы данных MySQL.

По сути мы кешируем базу данных MySQL, получая необходимые данные значительно быстрее.

Установка демона Memcached

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

Если вы владелец сервера с операционной системой Debian , то для установки memcached выполните следующую команду в консоли от имени администратора:

apt install memcached

В CentOS должно быть не сложнее.

После установки сервер Memcached запустится сразу. Конфигурация сервера находится в файле /etc/memcached.conf, в нем вы можете настраивать такие параметры как память, адрес и порт. Эти данные вам потребуются при конфигурации плагина для WordPress.

Если вы что-то будете менять, то не забудьте перезапустить демон memcached:

service memcached restart

Важно! Перезагрузка сервера удаляет все закэшированные данные.

Объекты WordPress и memcached

Воспользоваться возможностями memcached в WordPress для кеширования объектов можно с помощью плагина. Самый простой и при этом очень эффективный — это Memcached Object Cache. Среди его авторов — Райан Борэн, один из разработчиков ядра WordPress.

Для работы данного плагина вам потребуется расширение memcache (без d на конце) для PHP.

Не перепутайте PHP расширение memcache и PHP расширение memcached! Они оба работают с сервером memcached, но для плагина Memcached Object Cache нужен именно memcache (без d).

Как установить расширение PHP memcache

В свежих версиях Debian и Ubuntu это расширение можно установить так:

apt install php-memcache

Если используете fpm-формат взаимодействия между PHP и вебсервером NGINX, то перезагружать надо не веб-сервер, а саму эту службу, например так:

service php7.4-fpm restart

где php7.4-fpm — имя вашей службы и зависит от версии интерпретатора php и у вас это имя может быть другим.

Установка плагина Memcached Object Cache

Memcached Object Cache является не типичным плагином, а так называемым дроп-ином (вкраплением), который выполняется на самом раннем этапе загрузки ядра WordPress, и который не возможно отключить через панель администрирования.

Memcached для кэширования объектов и страниц WordPress

Чтобы установить плагин Memcached Object Cache, вам необходимо разместить в директории wp-content файл object-cache.php из архива плагина, после чего плагин автоматически становится активным.

Установить файл object-cache.php в директорию wp-content можно с помощью FTP-клиента или используя файловый менеджер вашего хостинга.

Важно!!! Директория установки плагина wp-content, а не wp-content/plugins и т.п.

Memcached для кэширования объектов и страниц WordPress

Если на данном этапе при посещении вашего сайта вы увидели «белый экран смерти», то причин может быть несколько:

  • Не установлен или не запущен сервер Memcached;
  • Не работает модуль memcache для PHP, не установлен или не перезапущен PHP после установки;
  • Нет доступа к серверу, например он сконфигурирован на другой порт.

Как настроить плагин Memcached Object Cache

Интерфейса для конфигурации плагина Memcached Object Cache нет. Для того, чтобы он заработал, вам необходимо внести изменения в файл wp-config.php добавив в него строку:

define( 'WP_CACHE_KEY_SALT', '...long random string...' );

где «…long random string…» — ваша уникальная строка со случайным набором символов.

Как отключить кеширование бъектов в WordPress с помощью memcached

Чтобы отключить кэширование объектов в Memcached достаточно удалить или переименовать файл object-cache.php в директории wp-content. Это действие не удалит данные на сервере.

Кэширование страниц WordPress

Кешировать страницы блога на WordPress я буду с помощью плагина Batcache. Он позволяет кэшировать страницы в WordPress с помощью механизма кэширования объектов расмотренного ранее. Batcache используется во многих высоко посещаемых проектах, включая сеть WordPress.com.

Что такое Batcache

Плагин Batcache нацелен на проекты с высокой посещаемостью. Он написан для выполнения только одной задачи — кэширование страниц. Основная идея плагина — использование постоянного кэша объектов WordPress для хранения данных. Это позволяет кэшировать страницы на серверах Memcached, Redis, APC и др.

Как установить WordPress плагин Batcache

До установки плагина Batcache, проверьте, что у вас работает плагин для внешнего кэширования объектов, например Memcached Object Cache, рассмотренный выше. Для конфигурирования плагина кэширования объектов вам потребуется root-доступ к вашей хостинг-площадке.

Memcached для кэширования объектов и страниц WordPress

Batcache можно скачать из официального репозитория WordPress.org, но не спешите его активировать на вашем сайте. Дистрибутив Batcache содержит в себе два отдельных плагина: advanced-cache.php для кэширования страниц и batcache.php (Batcache Manager) для некоторых дополнений к основному плагину.

Memcached для кэширования объектов и страниц WordPress
Memcached для кэширования объектов и страниц WordPress

Активация основного плагина Batcache происходит путем копирования файла advanced-cache.php из архива в директорию wp-content. Файл (или «drop-in») advanced-cache.php является специальным для WordPress, он исполняется на ранней стадии загрузки ядра, и именно с помощью этого файла реализуется кэширование страниц в WordPress.

Важно!!! Директория установки плагина wp-content, а не wp-content/plugins и т.п.

После копирования advanced-cache.php в директорию wp-content, необходимо включить его обработку в файле конфигурации wp-config.php с помощью специального параметра:

define( 'WP_CACHE', true );

Это строка должна быть выше (по тексту) подключения файла wp-settings.php.

Memcached для кэширования объектов и страниц WordPress

Как проверить, что плагин работает

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

<!--
    generated 179 seconds ago
    generated in 0.093 seconds
    served from batcache in 0.002 seconds
    expires in 121 seconds
-->

Эта информация говорит о том, что страница была сгенерирована 179 секунд назад за 0.093 сек. Выдача страницы произошла с помощью Batcache за 0.002 сек., обновление данной страницы в кэше произойдет через 121 секунду.

Batcache не кэширует страницы для вошедших (залогиненных) пользователей. Чтобы проверить его работу лучше воспользоваться режимом инкогнито в вашем браузере (Ctrl+Shift+P в FireFox или Ctrl+Shift+N в Google Chrome).

Как настроить плагин BatCache

Настройки по-умолчанию подходят для большинства сайтов, но при желании вы всегда можете их скорректировать. А так как в Batcache нет интерфейса для настройки плагина и все параметры находятся в исходном коде плагина. То нам необходимо создать файл настроек batcache-config.php в корневой директории WordPress и подключитm его в wp-config.php следующим образом:

require_once( ABSPATH . 'batcache-config.php' );

Эту строку необходимо разместить до подключения файла wp-settings.php, но после объявления константы ABSPATH.

В самом файле batcache-config.php необходимо объявить массив с настройками, который по умолчанию может быть пустым:

<?php
$batcache = array();

Далее в этот массив и в этом же файле можно добавлять параметры следующим образом:

$batcache['max_age'] = 600;

В этом примере мы устанавили временной интервал 600 секунд для max_age (время жизни одной страницы в кэше).

По анологии можно изменять следующие параметры:

  • max_age — время жизни одной страницы
  • times — количество требуемых посещений, перед тем как страница попадает в кэш
  • seconds — работает вместе с параметром times, сбрасывает счетчик через установленное время
  • debug — установить false для предотвращения вывода информации о кэше в исходном коде страниц
  • group — группа используемая для генерации ключей в кэше объектов. Изменив группу вы можете «сбросить» весь кэш страниц
  • cache_redirects — установите в положение true для того, чтобы кэшировать редиректы

Подробнее обо всех переменных и вариантах тонкой настройки можно прочитать на странице плагина в GitHub — https://github.com/Automattic/batcache

Для чего нужен плагин Batcache Manager

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

Краткая инструкция по использованию Memcached в WordPress

Чтобы получить максимальную производительность WordPress сайта выполните следующие действия:

  • Установите сервер memcached;
  • Установите PHP расширение php-memcache;
  • Установите плагин Memcached Object Cache;
  • Установите плагин Batcache.

Убедитесь, что вы используете свежую версию PHP и быстрый веб-сервер на front-end, например NGINX.

Выводы

Несмотря на сложность настройки сервер memcached и плагины Memcached Object Cache и Batcache позволяют увеличить производительность вашего WordPress сайта и его стрессоустойчивость при большом количестве посещений без дополнительных затрат на «железо».

После подключения плагина Memcached Object Cache на этом блоге существенно сократилось количество обращений к базе данных MySQL.

У меня в подвале сайта есть статистика времени генерации страницы, количества обращений к базе и объем потребляемой при этом памяти WordPress.

До использования плагина Memcached Object Cache на странице с картой сайта результаты были такими (это одна из самый «тяжелых» страниц в плане обращений к базе данных):

Memcached для кэширования объектов и страниц WordPress

После того как я установил сервер memcached и подключил плагин Memcached Object Cache количество обращений к базе заметно сократилось:

Memcached для кэширования объектов и страниц WordPress

Несколько улучшилось и время создания страницы (генерации).

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

Memcached для кэширования объектов и страниц WordPress

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

Оцените статью
( Пока оценок нет )