wpcache.ru wordpress WPCache.ru

Как оптимизировать отключение кеша в WordPress без потери производительности

В процессе разработки и поддержки сайтов на WordPress часто возникает необходимость отключить кеширование для отдельных страниц, пользователей или при определённых условиях. Однако простое отключение кеша полностью или выборочное отключение без продуманной оптимизации может привести к значительному падению производительности сайта и увеличению нагрузки на сервер.

Почему важно оптимизировать отключение кеша?

Кеширование — это один из наиболее эффективных способов ускорить загрузку сайта, снизить нагрузку на базу данных и сервер. Однако бывают ситуации, когда кеширование мешает отображению актуального содержимого, например, на страницах с динамическими данными, корзинами интернет-магазина или формами с персонализированным выводом.

Полное отключение кеша приводит к тому, что каждый запрос обрабатывается сервером с нуля, что сильно замедляет работу сайта, особенно при высокой посещаемости. Оптимизация отключения кеша позволяет сохранить производительность на остальных страницах, а критичным — отключить кеш только там, где это необходимо.

Основные методы выборочного отключения кеша в WordPress

Для гибкого управления кешем применяют несколько подходов:

  • Исключение URL и страниц из кеширования: большинство плагинов кэширования позволяют указать адреса, где кеш не применяется. Например, WooCommerce автоматически исключает страницы корзины и оформления заказа.
  • Отключение кеша для авторизованных пользователей: кэширование обычно полезно только для гостей, потому что у залогиненных пользователей вывод часто уникален.
  • Использование условий в шаблонах или плагинах: динамическое отключение кеша с помощью кода, например, с проверкой пользовательских ролей или параметров запроса.
  • Использование AJAX и динамической подгрузки данных: вместо отключения кеша для всей страницы, выводить динамические данные через AJAX-запросы.

Пример исключения страниц из кеша в плагине WP Super Cache

В админке WP Super Cache можно добавить URL в поле Advanced > Never cache the following pages. Например:

/cart/
/checkout/
/my-account/

Так эти страницы всегда будут загружаться без кеша, а остальные — кешироваться.

Пример кода для выборочного отключения кеша на уровне шаблона

Если вы используете собственный плагин или functions.php, можно реализовать функцию с префиксом wpcache_ для отключения кеша по условию:

function wpcache_disable_cache_for_logged_in_users() {
    if ( is_user_logged_in() ) {
        // Отключаем кеш, если пользователь залогинен
        define('DONOTCACHEPAGE', true);
    }
}
add_action('template_redirect', 'wpcache_disable_cache_for_logged_in_users');

В этом примере мы устанавливаем специальную константу DONOTCACHEPAGE, которую понимают многие плагины кеширования и не кешируют страницу.

Отключение кеша для AJAX-запросов

Если на сайте активно используются AJAX, то важно, чтобы эти запросы не кешировались:

function wpcache_no_cache_for_ajax() {
    if ( defined('DOING_AJAX') && DOING_AJAX ) {
        define('DONOTCACHEPAGE', true);
    }
}
add_action('init', 'wpcache_no_cache_for_ajax');

Советы по оптимизации отключения кеша

Для минимизации негативного влияния на скорость сайта при отключении кеша рекомендуем:

  • Отдавать динамические части страниц через AJAX, оставляя остальной контент кешируемым.
  • Использовать Transients API для хранения промежуточных результатов и уменьшения нагрузки.
  • Использовать Object Cache (например, Redis, Memcached) для ускорения запросов к базе данных, даже если отключён page cache.
  • Минимизировать количество страниц без кеша — отключайте кеш только там, где это действительно нужно.

Практический пример с AJAX для динамической корзины

Предположим, у нас интернет-магазин, и мы хотим отображать количество товаров в корзине в шапке сайта без отключения кеша всей страницы. Решение — вывести количество через AJAX.

JavaScript для обновления счётчика корзины:

jQuery(document).ready(function($) {
    function wpcache_update_cart_count() {
        $.ajax({
            url: wpcache_ajax_object.ajax_url,
            type: 'POST',
            data: {
                action: 'wpcache_get_cart_count'
            },
            success: function(response) {
                $('#cart-count').text(response);
            }
        });
    }
    wpcache_update_cart_count();
});

PHP-код в functions.php для обработки AJAX-запроса:

function wpcache_get_cart_count() {
    if ( function_exists('WC') ) {
        $count = WC()->cart->get_cart_contents_count();
        echo intval($count);
    } else {
        echo '0';
    }
    wp_die();
}
add_action('wp_ajax_wpcache_get_cart_count', 'wpcache_get_cart_count');
add_action('wp_ajax_nopriv_wpcache_get_cart_count', 'wpcache_get_cart_count');

Для передачи AJAX URL в JS добавим:

function wpcache_enqueue_scripts() {
    wp_enqueue_script('jquery');
    wp_localize_script('jquery', 'wpcache_ajax_object', array(
        'ajax_url' => admin_url('admin-ajax.php')
    ));
}
add_action('wp_enqueue_scripts', 'wpcache_enqueue_scripts');

Таким образом, мы не отключаем кеш страницы, но динамическая часть обновляется корректно.

Использование плагинов для гибкого управления кешем

Для профессионального управления кешем можно рассмотреть плагины с расширенными возможностями по исключению кеша:

  • Clearfy Pro — в том числе имеет удобные настройки исключений кеша.
  • WP Rocket — позволяет легко исключать страницы и отключать кеш для залогиненных.
  • LiteSpeed Cache — гибкая система исключений, поддержка AJAX.

Выбирайте плагин, который лучше всего интегрируется с вашим хостингом и требованиями сайта.

×
WPRemark
Внимание Внимание Внимание Внимание
-15%

на WPRemark плагин WordPress

Прокачай свой сайт! ⋙