Используем Memcached для кэширования объектов и страниц WordPress
Раздел(ы): WordPress
Просмотры: 5351
Комментарии: 0
Ускорить работу сайта можно по разному. Либо, перенести его на более мощный сервер, либо оптимизировать программное обеспечение существующего. Последний вариант позволит улучшить производительность не меняя «железо». В этой статье я расскажу как использовать сервер (сервис, службу) memcached для ускорения сайта на WordPress.
Я воспользуюсь возможностями сервера memcached с помощью плагинов и для кеширования объектов, и для кеширования страниц (записей) сайта.
Перед тем как начать оптимизацию WordPress желательно выполнить ряд действий для ускорения работы веб-сервера в целом. В частности, установить самую свежую версию PHP и быстрый вебсервер, например NGINX.
Самый быстрый веб-сервер
Будет хорошей практикой использовать 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 — https://moonback.ru/page/vestacp-zendopcache. В 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
После чего необходимо перезагрузить PHP.
В случае Apache перезапускаем веб-сервер и делаем это так:
service apache2 restart
Если используете fpm-формат взаимодействия между PHP и вебсервером NGINX, то перезагружать надо не веб-сервер, а саму эту службу, например так:
service php7.4-fpm restart
где php7.4-fpm — имя вашей службы и зависит от версии интерпретатора php и у вас это имя может быть другим.
Установка плагина Memcached Object Cache
Memcached Object Cache является не типичным плагином, а так называемым дроп-ином (вкраплением), который выполняется на самом раннем этапе загрузки ядра WordPress, и который не возможно отключить через панель администрирования.
Чтобы установить плагин Memcached Object Cache, вам необходимо разместить в директории wp-content файл object-cache.php из архива плагина, после чего плагин автоматически становится активным.
Установить файл object-cache.php в директорию wp-content можно с помощью FTP-клиента или используя файловый менеджер вашего хостинга.
Важно!!! Директория установки плагина wp-content, а не wp-content/plugins и т.п.
Если на данном этапе при посещении вашего сайта вы увидели «белый экран смерти», то причин может быть несколько:
- Не установлен или не запущен сервер 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-доступ к вашей хостинг-площадке.
Batcache можно скачать из официального репозитория WordPress.org, но не спешите его активировать на вашем сайте. Дистрибутив Batcache содержит в себе два отдельных плагина: advanced-cache.php для кэширования страниц и batcache.php (Batcache Manager) для некоторых дополнений к основному плагину.
Активация основного плагина 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.
Как проверить, что плагин работает
После объявления константы, плагин 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 на странице с картой сайта (https://moonback.ru/sitemap) результаты были такими (это одна из самый «тяжелых» страниц в плане обращений к базе данных):
После того как я установил сервер memcached и подключил плагин Memcached Object Cache количество обращений к базе заметно сократилось:
Несколько улучшилось и время создания страницы (генерации).
После подключения плагина Batcache в случае нахождения страницы в кеше время ее создания (отдачи клиенту) не превышает несколько тысячных долей секунды, что сравнимо со скоростью работы статичного HTML сайта.
Таким образом с помощью двух плагинов мы увеличили скорость работы динамического сайта до уровня статического, а так же сократили время генерации страницы при ее первом посещении перед попаданием в кеш и для вошедших (залогиненных) пользователей.
Благодарности
При написании статьи были использованы следующие источники: