Оптимизация скорости загрузки страниц — ключевой момент для любого сайта на WordPress. Один из эффективных способов уменьшить время отклика — применение внутреннего кеширования. В этой статье разберём, как использовать встроенные возможности кеша WordPress, как создавать собственные кеши с помощью Transient API, и какие плагины помогут упростить задачу.
Что такое внутренний кеш в WordPress и зачем он нужен
Внутренний кеш WordPress — это система хранения временных данных в памяти или базе данных, чтобы не выполнять повторяющиеся операции заново при каждом запросе. Это снижает нагрузку на сервер и ускоряет генерацию страниц.
WordPress по умолчанию поддерживает объектный кеш (Object Cache), который хранит данные в памяти на время выполнения скрипта. Однако, для постоянного кеширования между запросами нужно использовать дополнительные методы, например, Transient API или внешние кеш-системы.
Использование кеша позволяет:
- Уменьшить число запросов к базе данных.
- Снизить нагрузку на сервер.
- Ускорить формирование страниц.
- Повысить устойчивость сайта при больших нагрузках.
Transient API: создание и использование временного кеша
Transient API — встроенный механизм WordPress для сохранения временных данных с временем жизни. Это идеальный способ кешировать результаты тяжёлых запросов без необходимости писать сложный код.
Основные функции:
set_transient($transient, $value, $expiration)— сохраняет данные с ключом и временем жизни.get_transient($transient)— получает сохранённые данные, если срок не истёк.delete_transient($transient)— удаляет кеш.
Пример использования Transient API для кеширования результатов WP_Query
function wptavern_get_popular_posts() {
$cache_key = 'wptavern_popular_posts';
$popular_posts = get_transient($cache_key);
if (false === $popular_posts) {
$query = new WP_Query([
'posts_per_page' => 5,
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'post_status' => 'publish',
]);
$popular_posts = $query->posts;
set_transient($cache_key, $popular_posts, HOUR_IN_SECONDS);
}
return $popular_posts;
}
В этом примере функция сначала пытается получить кешированные популярные записи. Если кеш отсутствует или просрочен, выполняется запрос к базе, а результаты сохраняются в кеш на час.
Объектный кеш и его расширение с помощью внешних бекендов
Объектный кеш WordPress хранит данные в памяти на время выполнения PHP-скрипта. Естественно, эти данные теряются после завершения запроса. Чтобы кеш сохранялся между запросами, используют бекенды, такие как Memcached или Redis.
Для подключения внешнего бекенда нужно:
- Установить и настроить сервер Memcached или Redis на хостинге.
- Подключить к WordPress соответствующий плагин или drop-in файл
object-cache.php.
Вот несколько популярных решений:
- W3 Total Cache — поддержка Memcached и Redis, а также другие виды кеширования.
- WP Redis — простой плагин для интеграции Redis как объектного кеша.
Пример настройки Redis объектного кеша вручную
Для ручного подключения можно скопировать object-cache.php из репозитория redis-cache в папку wp-content и добавить в wp-config.php:
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_CACHE_KEY_SALT', 'wptavern_ru:');
define('WP_CACHE', true);
Это позволит хранить объектный кеш в Redis, значительно ускоряя повторные запросы.
Практические советы по кешированию в темах и плагинах
Если вы пишете собственную тему или плагин, используйте кеширование для тяжёлых операций. Например, для API-запросов, сложных SQL-запросов или генерации больших HTML-блоков.
Пример кеширования HTML-вывода с помощью Transient API:
function wptavern_render_custom_block() {
$cache_key = 'wptavern_custom_block_html';
$cached_html = get_transient($cache_key);
if (false !== $cached_html) {
return $cached_html;
}
ob_start();
?>
<div class="custom-block">
<p>Динамический контент с PHP и вызовами API</p>
</div>
<?php
$html = ob_get_clean();
set_transient($cache_key, $html, 30 * MINUTE_IN_SECONDS);
return $html;
}
Таким образом, при повторном вызове вместо повторного построения HTML возвращается кешированная строка.
Плагины для расширенного кеширования и управления кешем
Кроме указанных выше, стоит обратить внимание на следующие плагины, которые помогут управлять кешем и повысить производительность:
- Clearfy Pro — оптимизация и управление кешем, отключение лишних скриптов и функций.
- ABC Pagination — эффективная постраничная навигация с минимальной нагрузкой.
Особенности кеширования при использовании REST API и AJAX
Кеширование важно не только для обычных страниц, но и для REST API запросов и AJAX-обработчиков. Используйте Transient API или объектный кеш для хранения результатов тяжелых запросов, чтобы не перегружать сервер.
Пример кеширования данных в AJAX-обработчике:
add_action('wp_ajax_wptavern_get_data', 'wptavern_ajax_get_data');
function wptavern_ajax_get_data() {
$cache_key = 'wptavern_ajax_data';
$data = get_transient($cache_key);
if (false === $data) {
// Тяжёлая операция, например запрос к API или БД
$data = ['time' => current_time('mysql'), 'info' => 'Данные обновлены'];
set_transient($cache_key, $data, 10 * MINUTE_IN_SECONDS);
}
wp_send_json_success($data);
}
Такой подход снижает нагрузку при частых AJAX-запросах.
Выводы и рекомендации по кешированию в WordPress
Внутренний кеш WordPress — мощный инструмент для ускорения сайта. Используйте Transient API для простого кеширования с временем жизни, подключайте объектный кеш с помощью Redis или Memcached для постоянного хранения между запросами, а также оптимизируйте темы и плагины с учетом кеширования.
Обязательно тестируйте работу кеша и очищайте его при изменениях данных. Для удобства используйте проверенные плагины и изучайте возможности WPShop с метками utm для дополнительных инструментов оптимизации.