Что такое AJAX подгрузка корзины в WooCommerce и почему она тормозит сайт
В WooCommerce по умолчанию корзина обновляется через AJAX, чтобы динамически менять количество товаров и стоимость без перезагрузки страницы. Это удобно для пользователей, но на больших и нагруженных сайтах AJAX-запросы могут создавать дополнительную нагрузку на сервер и увеличивать время отклика, особенно на страницах с высокой посещаемостью.
Если на сайте наблюдаются проблемы с производительностью, отключение AJAX подгрузки корзины может помочь снизить нагрузку и ускорить загрузку страниц.
Диагностика проблемы с AJAX корзиной
- Проверьте HTTP-запросы в инструментах разработчика браузера (Network) — ищите частые AJAX-запросы к
wc-ajax=get_refreshed_fragments. - Проанализируйте нагрузку на сервер с помощью мониторинга (top, htop, New Relic, или плагинов для мониторинга).
- Проверьте время загрузки страниц с помощью GTMetrix, PageSpeed Insights, или аналогичных сервисов — если есть задержки связанные с AJAX запросами WooCommerce.
Пошаговое отключение AJAX подгрузки корзины в WooCommerce
Отключение AJAX подгрузки корзины достигается фильтрацией функционала WooCommerce, отвечающего за обновление «фрагментов» корзины.
add_filter('woocommerce_add_to_cart_fragments', '__return_empty_array');Однако полный возврат пустого массива приведет к тому, что количество товаров в корзине не будет обновляться без перезагрузки страницы. Чтобы избежать проблем, нужно отключить только AJAX обновление корзины на фронтенде, но сохранить базовый функционал.
Рекомендуемый подход — деактивировать скрипт wc-cart-fragments, который отвечает за AJAX обновления. Для этого добавьте следующий код в functions.php вашей темы или в кастомный плагин:
function disable_woocommerce_cart_fragments() {
if (!is_admin()) {
wp_dequeue_script('wc-cart-fragments');
}
}
add_action('wp_enqueue_scripts', 'disable_woocommerce_cart_fragments', 11);Объяснение кода
wp_dequeue_script('wc-cart-fragments')отключает скрипт, который отвечает за AJAX подгрузку корзины.- Проверка
!is_admin()гарантирует, что скрипт отключается только на фронтенде, не ломая админку. - Приоритет 11 ставится после стандартной очереди скриптов WooCommerce.
Как проверить, что AJAX подгрузка корзины отключена
- Откройте любую страницу сайта и откройте консоль браузера (F12), перейдите во вкладку Network.
- Добавьте товар в корзину, обратите внимание на отсутствие AJAX-запросов с параметром
wc-ajax=get_refreshed_fragments. - Проверьте, что количество товаров в иконке корзины не обновляется автоматически без перезагрузки страницы.
- Проверьте производительность страницы с помощью инструментов (GTMetrix, Lighthouse) — время отклика должно улучшиться.
Частые ошибки при отключении AJAX подгрузки корзины и их исправление
1. Корзина не обновляется и количество товаров не меняется
Причина: полностью отключён фильтр woocommerce_add_to_cart_fragments или скрипт, но не предусмотрена перезагрузка страницы.
Решение: отключайте только скрипт wc-cart-fragments, а не фильтр, чтобы не сломать базовый функционал WooCommerce.
2. Ошибки JavaScript после отключения
Причина: другие плагины или тема зависят от AJAX обновления корзины и вызывают скрипты, которые становятся невалидными без wc-cart-fragments.
Решение: проверьте консоль на ошибки, при необходимости адаптируйте тему или отключите конфликтующие плагины.
3. Отключение происходит в админке
Причина: отсутствует проверка !is_admin().
Решение: всегда проверяйте условие для отключения только на фронтенде.
Практические советы по безопасности и производительности
- Отключение AJAX подгрузки корзины уменьшает нагрузку на сервер, но ухудшает UX — учитывайте баланс между скоростью и удобством.
- Используйте кеширование страниц (например, через плагин WP Rocket или интеграцию с Redis), чтобы дополнительно снизить нагрузку.
- Проверяйте совместимость с другими плагинами WooCommerce перед отключением AJAX функций.
- Регулярно обновляйте WooCommerce и тему для получения последних исправлений производительности.
Таблица сравнения способов отключения AJAX подгрузки корзины WooCommerce
| Метод | Описание | Преимущества | Недостатки |
|---|---|---|---|
Фильтр woocommerce_add_to_cart_fragments возвращает пустой массив | Полностью отключает обновление фрагментов корзины | Простой код | Корзина не обновляется без перезагрузки, может сломать некоторые функции |
Отключение скрипта wc-cart-fragments | Деактивирует AJAX скрипты корзины | Снижает нагрузку без кардинальных изменений UX | Количество товаров не обновляется динамически, нужно адаптировать тему |
| Использование плагинов для оптимизации | Плагины как Clearfy Pro могут оптимизировать AJAX запросы | Быстрая настройка без кода | Может быть платным, не всегда гибко |