HUSKY - Products Filter Professional for WooCommerce

Як прискорити пошук текстового фільтра WOOF

Якщо ваш сайт має велику кількість товарів (3000+) і ви відчуваєте повільну роботу пошуку з [woof_text_filter], цей посібник допоможе вам оптимізувати його.

Проблема

За замовчуванням HUSKY використовує метод SQL JOIN для пошуку, що може бути повільним на великих базах даних. Пошук тексту, що триває 10+ секунд, і фільтрація за категоріями, що спричиняють затримки, є поширеними симптомами.

Рішення 1: Увімкніть швидкий метод пошуку (post__in)

Плагін має вбудований швидший метод пошуку, який використовує post__in замість SQL JOIN. Це набагато ефективніше для великих каталогів товарів.

Реалізація

Додайте цей єдиний рядок до теми вашого functions.php файл:

add_filter('woof_husky_query_post__in', '__return_true');

Очікувані результати

  • Швидкість текстового пошуку: Від 10+ секунд до 1-3 секунд
  • Працює відразу після додавання коду
  • Зміни бази даних не потрібні

Рішення 2: Оптимізація фільтрації категорій

Якщо фільтрація за категоріями все ще повільна після увімкнення швидкого пошуку, у вас є два варіанти:

Варіант А: Додати індекси бази даних (Рекомендовано)

Індекси бази даних значно прискорюють запити до категорій шляхом оптимізації term_relationships та term_taxonomy таблиці.

Додайте цей код до вашої functions.php:

add_action('admin_init', 'add_woof_category_indexes', 999);

function add_woof_category_indexes() {
    global $wpdb;

    // Run only once
    if (get_option('woof_category_indexes_added')) {
        return;
    }

    // Add index to term_relationships table
    $wpdb->query("
        ALTER TABLE {$wpdb->term_relationships}
        ADD INDEX woof_cat_idx (object_id, term_taxonomy_id)
    ");

    // Add index to term_taxonomy table
    $wpdb->query("
        ALTER TABLE {$wpdb->term_taxonomy}
        ADD INDEX woof_tax_idx (taxonomy, term_id)
    ");

    // Mark as completed
    update_option('woof_category_indexes_added', true);
}

Як це працює:

  • Виконується один раз при першому завантаженні сторінки адміністратора
  • Створює оптимізовані індекси бази даних
  • Зберігає прапорець завершення, щоб запобігти повторному запуску

Очікувані результати:

  • Фільтрація категорій: Від кількох секунд до < 1 секунди
  • Постійне рішення (індекси залишаються після видалення коду)

Варіант B: Кешування запитів до категорій

Якщо ви не можете змінити структуру бази даних або хочете інший підхід, кешування забезпечує значне покращення продуктивності.

Додайте цей код до вашої functions.php:

add_filter('woof_get_query_args', 'cache_woof_category_queries', 10, 1);

function cache_woof_category_queries($args) {
    // Only cache when category filter is used
    if (empty($_GET['product_cat'])) {
        return $args;
    }

    // Generate cache key based on current filters
    $cache_key = 'woof_cat_' . md5(serialize($_GET));
    $cached_ids = get_transient($cache_key);

    // Return cached results if available
    if ($cached_ids !== false) {
        $args['post__in'] = $cached_ids;
        return $args;
    }

    return $args;
}

add_action('pre_get_posts', 'store_woof_category_cache', 999);

function store_woof_category_cache($query) {
    // Store query results in cache
    if (!empty($_GET['product_cat']) && !empty($query->posts)) {
        $cache_key = 'woof_cat_' . md5(serialize($_GET));
        $post_ids = wp_list_pluck($query->posts, 'ID');
        set_transient($cache_key, $post_ids, HOUR_IN_SECONDS);
    }
}

Як це працює:

  • Кешує результати фільтрації категорій протягом 1 години
  • Генерує унікальний ключ кешу для кожної комбінації фільтрів
  • Повертає кешовані ID товарів при наступних однакових пошуках

Очікувані результати:

  • Перший пошук: Нормальна швидкість
  • Наступні однакові пошуки: Майже миттєві результати
  • Кеш автоматично закінчується через 1 годину

Яке рішення використовувати?

Проблеми зі швидкістю пошуку тексту:

Використовуйте Рішення 1 (фільтр post__in) – це найпростіше та найефективніше рішення.

Проблеми зі швидкістю фільтрації категорій:

Використовуйте рішення 2A (Індекси бази даних), якщо:

  • Ви маєте доступ до бази даних
  • Ви хочете постійну оптимізацію
  • Вам потрібна стабільна швидкість для всіх запитів

Використовуйте рішення 2B (Кешування), якщо:

  • Ви не можете змінювати структуру бази даних
  • Ваші користувачі часто повторюють ті самі пошуки
  • У вас є змінні шаблони пошуку

Об'єднання рішень:

Ви можете безпечно використовувати всі рішення разом для максимальної продуктивності:

  1. Увімкнути post__in метод (Рішення 1)
  2. Додайте індекси бази даних (Рішення 2A)
  3. Додайте кешування (Рішення 2B) – необов'язково для додаткового прискорення

Важливі примітки

  • Необхідна дочірня тема: Завжди додавайте код до дочірньої теми functions.php щоб уникнути втрати під час оновлень теми
  • Спочатку зробіть резервну копію: Перед додаванням індексів бази даних, зробіть резервну копію бази даних
  • Тестове середовище: Спочатку тестуйте рішення на тестовому сайті, якщо можливо
  • Очищення кешу: Якщо використовуєте рішення для кешування, пам’ятайте, що кешовані результати оновлюються щогодини

Тестування ваших змін

  1. Додайте код до вашого functions.php
  2. Очистити всі кеші (браузер, WordPress, сервер)
  3. Тестуйте пошук, який раніше був повільним
  4. Відстеження покращення часу пошуку

Оптимізація на стороні сервера

Якщо ці рішення не забезпечують достатнього покращення, розгляньте:

  • Оновлення до швидшого хостингу
  • Увімкнення кешування об'єктів (Redis/Memcached)
  • Оптимізація конфігурації вашого серверу бази даних
  • Зменшення кількості активних плагінів

Source: https://pluginus.net/support/topic/very-slow-woof_text_filter-searches/