Кеширование — один из ключевых способов ускорить работу сайта на WordPress. Даже при использовании популярных плагинов кеша иногда бывает полезно создать собственный механизм кеширования для специфических задач, чтобы контролировать процесс и экономить ресурсы сервера. В этой статье мы разберём, как создать эффективный кеш в WordPress на примере функций с префиксом PremiumWP, а также рассмотрим, какие плагины можно использовать для комплексного решения.
Почему важно создавать собственный кеш в WordPress
Типичные плагины кеширования, такие как WP Super Cache или W3 Total Cache, работают на уровне страниц и объектов, но у них не всегда есть гибкость для кеширования специфичных данных — например, результатов сложных запросов к базе или пользовательских вычислений. Создавая собственный кеш, мы можем:
- Хранить в кеше именно те данные, которые часто запрашиваются и долго формируются.
- Контролировать время жизни кеша по своему усмотрению.
- Избегать лишней нагрузки на базу данных и сервер.
- Иметь возможность быстро очищать кеш при обновлении данных.
Далее рассмотрим, как реализовать такой кеш на базе Transient API, а также как расширить его с помощью объекта кеша WordPress.
Использование Transient API для кеширования данных
Transient API позволяет сохранить данные в базе с автоматическим временем истечения. Это простой и удобный способ кеширования, который подходит для результатов запросов, вычислений и т.д.
Рассмотрим пример функции premiumwp_get_expensive_data(), которая выполняет длительный запрос и кеширует результат на 12 часов.
function premiumwp_get_expensive_data() {
$cache_key = 'premiumwp_expensive_data';
$data = get_transient( $cache_key );
if ( false === $data ) {
// Симуляция долгого запроса
$data = premiumwp_expensive_query();
set_transient( $cache_key, $data, 12 * HOUR_IN_SECONDS );
}
return $data;
}
function premiumwp_expensive_query() {
global $wpdb;
// Пример сложного запроса
$result = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE post_status = 'publish' ORDER BY post_date DESC LIMIT 10", ARRAY_A);
return $result;
}В этом примере при первом вызове функция выполняет сложный запрос и сохраняет результат в transient с ключом premiumwp_expensive_data. При последующих вызовах данные берутся из кеша, что значительно ускоряет работу.
Преимущества и ограничения Transient API
Transient API — встроенный и простой способ кеширования, но он хранит данные в базе данных, что может быть неэффективно при больших объёмах и частых запросах. Для более производительных решений рекомендуются объектные кеши (Memcached, Redis).
Использование объектного кеша WordPress для быстрого кеширования
WordPress поддерживает объектный кеш, который работает в памяти и ускоряет доступ к данным. Если на сервере настроен Memcached или Redis, функции wp_cache_set(), wp_cache_get() работают очень быстро.
Пример кеширования результатов запроса с помощью объектного кеша:
function premiumwp_get_data_object_cache() {
$cache_key = 'premiumwp_object_cache_data';
$data = wp_cache_get( $cache_key, 'premiumwp' );
if ( false === $data ) {
$data = premiumwp_expensive_query();
wp_cache_set( $cache_key, $data, 'premiumwp', 3600 ); // 1 час
}
return $data;
}Здесь мы используем собственный namespace premiumwp для удобства и избежания конфликтов. При отсутствии объектного кеша WordPress откатится к кешированию в БД, но скорость будет ниже.
Настройка Memcached или Redis для WordPress
Чтобы использовать объектный кеш на уровне памяти, необходимо:
- Установить и запустить Memcached или Redis на сервере.
- Установить соответствующий PHP-расширение (php-memcached или php-redis).
- Подключить плагин кеша с поддержкой выбранного сервиса, например W3 Total Cache или Redis Object Cache.
После настройки вызовы wp_cache_get() и wp_cache_set() будут работать максимально быстро.
Когда и как очищать кеш
Очень важно правильно очищать кеш при обновлении данных. Например, если мы кешируем список последних постов, то при публикации новой записи кеш необходимо сбросить.
Для этого можно добавить хук на сохранение поста:
function premiumwp_clear_cache_on_post_save( $post_id ) {
if ( wp_is_post_revision( $post_id ) ) {
return;
}
wp_cache_delete( 'premiumwp_object_cache_data', 'premiumwp' );
delete_transient( 'premiumwp_expensive_data' );
}
add_action( 'save_post', 'premiumwp_clear_cache_on_post_save' );<Так мы гарантируем, что при обновлении контента кеш будет сброшен и данные обновятся.
Лучшие плагины кеширования для WordPress в дополнение к кастомному кешу
Для комплексной оптимизации сайта рекомендуем использовать:
- WP Super Cache — простой и надёжный кеш страниц, хорошо подходит для большинства сайтов.
- W3 Total Cache — мощный и гибкий, поддерживает объектный кеш, CDN и минификацию.
- Redis Object Cache — интегрируется с Redis для быстрого объектного кеша.
- LiteSpeed Cache — если сервер на LiteSpeed, обеспечивает очень эффективное кеширование.
Эти плагины хорошо сочетаются с собственными функциями кеширования для специфичных задач.
Итоговые рекомендации по созданию кеша в WordPress
Создавая собственный кеш в WordPress, придерживайтесь следующих правил:
- Используйте Transient API для средних по размеру и времени жизни данных.
- Для быстродействия и больших объёмов используйте объектный кеш с Memcached или Redis.
- Обязательно добавляйте очистку кеша при обновлении данных.
- Используйте префиксы в ключах кеша для избежания конфликтов.
- Тестируйте производительность и корректность данных после внедрения кеширования.
Таким образом, вы сможете существенно снизить нагрузку на сервер, ускорить загрузку страниц и улучшить пользовательский опыт на сайте WordPress.