Плагин Batcache позволяет кэшировать страницы в WordPress с помощью механизма кэширования объектов. Batcache используется во многих высоко посещаемых проектах, включая сеть WordPress.com.
Что такое Batcache
Batcache это плагин от создателей популярной сети WordPress.com. Он нацелен на проекты с высокой посещаемостью и в отличие от многих других плагинов кэширования, он прекрасно работает в многосерверной архитектуре.
Плагин Batcache также отличается от большинства аналогов тем, что он выполняет лишь одну задачу — кэширование страниц. Он не кэширует запросы в базу данных или объекты WordPress, он не имеет функции CDN, сжатия, конкатенации или минификации. Он даже не имеет интерфейса для настройки, что многим покажется недостатком, поскольку для его конфигурации приходится работать с кодом PHP.
Основная идея плагина — использование постоянного кэша объектов WordPress для хранения данных. Это позволяет кэшировать страницы на серверах Memcached, Redis, APC и др. При этом сервер кэширования может находится как локально (на том же сервере, что и само веб-приложение), так и удаленно. Именно поэтому 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.
После копирования advanced-cache.php в директорию wp-content, необходимо включить его обработку в файле конфигурации wp-config.php с помощью специальной константы:
define( 'WP_CACHE', true );
Убедитесь в том, что константа объявлена до подключения файла wp-settings.php.
Проверка работоспособности плагина
После объявления константы, плагин Batcache начинает автоматически кэшировать страницы. Для того, чтобы проверить его работоспособность, посетите любую страницу вашего сайта и просмотрите ее исходный код. Batcache автоматически добавит туда следующую информацию:
<!-- generated 207 seconds ago generated in 0.450 seconds served from batcache in 0.007 seconds expires in 93 seconds -->
Здесь показано, что страница была сгенерирована 207 секунд назад за 0.45 сек. Выдача страницы произошла с помощью Batcache за 0.007 секунд, обновление данной страницы в кэше произойдет через 93 секунды.
Учтите, что по умолчанию Batcache не кэширует страницы для вошедших пользователей, или для тех, кто оставил хотя бы один комментарий на вашем сайте. Чтобы проверить работоспособность лучше воспользоваться режимом инкогнито в вашем браузере (Cmd+Shift+N или Ctrl+Shift+N в Google Chrome).
Настройка плагина Batcache
Как мы упомянули ранее в Batcache нет интерфейса для настройки плагина. Все параметры находятся в исходном коде плагина, а изменения необходимо вносить в глобальном массиве $batcache
, который необходимо объявить до исполнения самого плагина.
Создайте в корневой директории новый файл batcache-config.php и подключите его в 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
для того, чтобы кэшировать редиректы
Для удобства плагин объявляет функцию batcache_cancel()
, которой можно предотвратить кэширование той или иной страницы в коде вашей темы или любого плагина. Например если вы работаете в режиме Multisite и вам необходимо предотвратить кэш определенного сайта в сети, вы можете воспользоваться следующим кодом в плагине:
add_action( 'init', 'my_cache_control' ); function my_cache_control() { if ( get_current_blog_id() == 5 && function_exists( 'batcache_cancel' ) ) batcache_cancel(); }
Таким образом страницы на сайте с идентификатором 5 кэшироваться не будут.
Массив unique в Batcache
Плагин Batcache имеет специальный массив unique
, который используется в построении ключа для кэширования. По умолчанию этот массив пустой, но вы можете им воспользоваться для разделения посетителей на уникальные группы, например в зависимости от установленного cookie в batcache-config.php:
$batcache['unique'] = array(); if ( ! empty( $_COOKIE['my-cookie'] ) ) $batcache['unique']['my-cookie'] = $_COOKIE['my-cookie'];
Посетитель со значением 1 в куки my-cookie
увидит один вариант страницы под одним адресом. Посетитель со значением 2 увидит другой вариант. А посетитель без подобного куки увидит третий вариант, и все три варианта будут выдаваться из кэша. Это полезно если вы хотите например провести A/B тестирование каких-либо страниц.
Таким же образом можно определить уникальные группы например для посетителей с мобильных устройств, с поисковых систем, из определенный стран и прочее.
Игнорирование параметров запроса
По умолчанию Batcache придает значение всем параметрам запроса, включая вспомогательные, например utm_source
, utm_medium
, utm_campaign
и другие параметры Google Analytics, которые не влияют на содержание выводимой страницы.
Для того, чтобы Batcache использовал один единый ключ для кэширования страниц с подобными параметрами и без них, необходимо их «вычистить» из строки запроса. Сделать это можно в файле batcache-config.php:
$ignore_get_keys = array( 'utm_source', 'utm_medium', 'utm_term', 'utm_content', 'utm_campaign' ); parse_str( $_SERVER['QUERY_STRING'], $query ); foreach ( $ignore_get_keys as $key ) { if ( isset( $query[ $key ] ) ) unset( $query[ $key ] ); if ( isset( $_GET[ $key ] ) ) unset( $_GET[ $key ] ); } $_SERVER['QUERY_STRING'] = http_build_query( $query );
В массив $ignore_get_keys
можно установить и другие параметры, которые не влияют на содержание выводимой страницы.
Плагин Batcache Manager
Как мы упомянули ранее, в дистрибутиве с плагином Batcache есть вспомогательный плагин Batcache Manager, который вы можете активировать стандартным образом.
Он объявляет полезную функцию batcache_clear_url()
, с помощью который можно обновить кэш по определенному адресу. Batcache Manager также использует эту функцию для обновления кэша главной страницы и страницы записи при ее сохранении. Это может быть полезным тогда, когда вы выставили высокое время жизни кэша.
Заключение
Несмотря на дополнительные требования плагина Batcache и на сложности его настройки, мы рекомендуем его попробовать, особенно если речь идет о сайте с высокой посещаемостью. Подобрать правильные параметры для Batcache можно быстро и легко методом проб и ошибок, но не забывайте поглядывать на состояние ваших кэш-серверов.
Если вы уже используете Batcache в ваших проектах, советуем рассмотреть более свежие наработки в официальном репозитории плагина на GitHub, в частности функции vary_cache_on_function()
и batcache_stats()
.
Если у вас возникнут вопросы при работе с плагином Batcache, оставьте комментарий и мы обязательно вам ответим.