Кэширование — один из ключевых способов ускорить загрузку сайта на WordPress. Особенно актуально для проектов с большим количеством посетителей и динамическим контентом. В этой статье разберём, как создать собственный автоматический кэш с помощью кода и популярных плагинов, а также рассмотрим лучшие практики для эффективного кеширования.
Зачем нужен автоматический кэш в WordPress
WordPress по умолчанию строит страницы динамически, обращаясь к базе данных при каждом запросе пользователя. Это увеличивает время отклика сервера и снижает производительность. Автоматический кэш позволяет сохранять сгенерированный HTML в отдельном месте (файлы, объектный кэш, память) и отдавать его пользователю без повторной генерации.
Преимущества автоматического кэширования:
- Сокращение времени загрузки страниц;
- Снижение нагрузки на сервер и базу данных;
- Улучшение SEO-показателей за счёт скорости;
- Повышение удобства пользователей.
Основные методы кэширования в WordPress
Существуют разные типы кэширования и способы их внедрения:
- Кэширование страниц (Page Cache) — сохранение полной HTML-страницы на диск или в память;
- Объектный кэш (Object Cache) — кэширование результатов запросов к базе данных для повторного использования;
- Кэширование базы данных — специфическое кэширование сложных запросов;
- Кэширование браузера — указание браузеру хранить статические ресурсы;
- Кэширование фрагментов (Fragment Cache) — кэширование частей страницы, например, сложных виджетов.
Создание простого автоматического кэша страниц с помощью кода
Рассмотрим пример реализации автоматического кэширования HTML-выхода в WordPress с использованием файловой системы. Это поможет понять базовый принцип работы кэша.
Шаг 1. Запись кэша в файл
function wpeditor_start_page_cache() {
if (is_user_logged_in()) {
return; // не кэшируем для авторизованных пользователей
}
$cache_file = wpeditor_get_cache_file_path();
if (file_exists($cache_file)) {
echo file_get_contents($cache_file);
exit;
}
ob_start();
}
add_action('template_redirect', 'wpeditor_start_page_cache');
Шаг 2. Сохранение кэша после генерации страницы
function wpeditor_end_page_cache() {
if (is_user_logged_in()) {
return;
}
$cache_file = wpeditor_get_cache_file_path();
$cache_dir = dirname($cache_file);
if (!file_exists($cache_dir)) {
mkdir($cache_dir, 0755, true);
}
file_put_contents($cache_file, ob_get_contents());
ob_end_flush();
}
add_action('shutdown', 'wpeditor_end_page_cache');
Шаг 3. Функция формирования пути к файлу кэша
function wpeditor_get_cache_file_path() {
$cache_dir = WP_CONTENT_DIR . '/cache/wpeditor-page-cache/';
$url_hash = md5($_SERVER['REQUEST_URI']);
return $cache_dir . $url_hash . '.html';
}
Этот простой подход создаёт файл с кешем для каждой страницы, если пользователь не авторизован. При повторном заходе файл отдаётся напрямую, что значительно ускоряет загрузку.
Использование плагинов для автоматического кэширования
Если вы не хотите писать код с нуля, можно использовать готовые решения. Рассмотрим несколько популярных плагинов с возможностью автоматического кэширования.
WP Super Cache
Очень популярный и простой плагин, который генерирует статические HTML-файлы из динамических страниц WordPress. Отличается хорошей совместимостью и гибкими настройками.
- Поддержка сжатия Gzip;
- Автоматическое удаление устаревших кэшей;
- Возможность настройки CDN.
Установка и активация плагина автоматически включают кэширование страниц.
Clearfy Pro
Плагин для оптимизации WordPress, в том числе имеет мощные инструменты для кэширования и очистки сайта. Поддерживает:
- Удаление лишних функций и скриптов;
- Ускорение загрузки за счёт кэширования;
- Совместимость с WooCommerce и другими плагинами.
Подробнее о Clearfy Pro — официальный сайт.
Как автоматизировать очистку кэша при обновлении контента
Очень важно, чтобы кэш сбрасывался автоматически при обновлении постов, страниц или других данных. Для этого можно использовать хуки WordPress.
function wpeditor_clear_page_cache_on_update( $post_id ) {
if ( wp_is_post_revision( $post_id ) ) {
return;
}
$cache_dir = WP_CONTENT_DIR . '/cache/wpeditor-page-cache/';
if ( file_exists( $cache_dir ) ) {
$files = glob( $cache_dir . '*.html' );
foreach ( $files as $file ) {
unlink( $file );
}
}
}
add_action( 'save_post', 'wpeditor_clear_page_cache_on_update' );
Этот код удаляет все файлы кэша при сохранении любого поста, что гарантирует показ актуальной информации.
Советы и рекомендации по эффективному кэшированию
При реализации автоматического кэширования учитывайте следующие моменты:
- Не кэшируйте страницы с формами и персонализированным контентом, например, страницы корзины или личного кабинета;
- Используйте объектный кэш (например, Redis или Memcached) для ускорения запросов к базе данных;
- Настраивайте время жизни кэша в зависимости от частоты обновления контента;
- Проверяйте совместимость с другими плагинами, чтобы избежать конфликтов;
- Используйте инструменты мониторинга (например, Query Monitor) для анализа производительности.
Для комплексной оптимизации можно сочетать собственное кэширование с плагинами, например, Clearfy Pro, который умеет автоматически очищать кэш и оптимизировать сайт.