HUSKY - Products Filter Professional for WooCommerce

Como Acelerar as Buscas do Filtro de Texto WOOF

Se o seu site tiver um grande número de produtos (3000+) e você estiver experimentando desempenho lento na pesquisa com [woof_text_filter], este guia irá ajudá-lo a otimizá-lo.

O Problema

Por padrão, o HUSKY usa o método SQL JOIN para pesquisas, o que pode se tornar lento em bancos de dados grandes. Pesquisas de texto levando mais de 10 segundos e filtragem de categoria causando atrasos são sintomas comuns.

Solução 1: Ativar Método de Pesquisa Rápida (post__in)

O plugin tem um método de busca mais rápido integrado que usa post__in em vez de SQL JOINs. Isso é muito mais eficiente para grandes catálogos de produtos.

Implementação

Adicione esta linha única ao tema do seu functions.php arquivo:

add_filter('woof_husky_query_post__in', '__return_true');

Resultados Esperados

  • Velocidade da pesquisa de texto: De 10+ segundos para 1-3 segundos
  • Funciona imediatamente após adicionar o código
  • Nenhuma alteração no banco de dados necessária

Solução 2: Otimizar Filtragem de Categoria

Se a filtragem de categoria ainda estiver lenta após habilitar a pesquisa rápida, você tem duas opções:

Opção A: Adicionar Índices de Banco de Dados (Recomendado)

Índices de banco de dados aceleram dramaticamente as consultas de categoria, otimizando o term_relationships e term_taxonomy tabelas.

Adicione este código ao seu 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);
}

Como funciona:

  • Executa uma vez no primeiro carregamento da página de administração
  • Cria índices de banco de dados otimizados
  • Armazena sinalizador de conclusão para evitar reexecução

Resultados Esperados:

  • Filtragem de categoria: De vários segundos para < 1 segundo
  • Solução permanente (índices permanecem após a remoção do código)

Opção B: Cache de Consultas de Categoria

Se você não puder modificar a estrutura do banco de dados ou quiser uma abordagem diferente, o cache oferece uma boa melhoria de desempenho.

Adicione este código ao seu 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);
    }
}

Como funciona:

  • Armazena em cache os resultados do filtro de categoria por 1 hora
  • Gera chave de cache exclusiva por combinação de filtro
  • Retorna IDs de produtos em cache em pesquisas idênticas subsequentes

Resultados Esperados:

  • Primeira busca: Velocidade normal
  • Pesquisas idênticas subsequentes: Resultados quase instantâneos
  • O cache expira automaticamente após 1 hora

Qual Solução Usar?

Para Problemas de Velocidade de Busca por Texto:

Use a Solução 1 (filtro post__in) – esta é a correção mais fácil e eficaz.

Para Problemas de Velocidade de Filtragem de Categoria:

Use a Solução 2A (Índices de Banco de Dados) se:

  • Você tem acesso ao banco de dados
  • Você quer otimização permanente
  • Você precisa de velocidade consistente para todas as consultas

Use a Solução 2B (Cache) se:

  • Você não pode modificar a estrutura do banco de dados
  • Seus usuários repetem frequentemente as mesmas pesquisas
  • Você tem padrões de busca variáveis

Combinando Soluções:

Você pode usar com segurança todas as soluções juntas para o máximo desempenho:

  1. Habilitar post__in método (Solução 1)
  2. Adicionar índices de banco de dados (Solução 2A)
  3. Adicionar cache (Solução 2B) – opcional para um impulso extra

Notas Importantes

  • Child Theme Necessário: Sempre adicione código a um tema filho functions.php para evitar perdas durante as atualizações do tema
  • Faça Backup Primeiro: Antes de adicionar índices ao banco de dados, faça backup do seu banco de dados
  • Ambiente de Teste: Teste as soluções no site de staging primeiro, se possível
  • Limpeza de Cache: Se estiver usando solução de cache, lembre-se que os resultados em cache são atualizados a cada hora

Testando suas alterações

  1. Adicione o código ao seu functions.php
  2. Limpar todos os caches (navegador, WordPress, servidor)
  3. Teste uma pesquisa que antes era lenta
  4. Monitore a melhoria do tempo de pesquisa

Otimização do Lado do Servidor

Se estas soluções não oferecerem melhoria suficiente, considere:

  • Atualizando para hospedagem mais rápida
  • Ativando o cache de objetos (Redis/Memcached)
  • Otimizando a configuração do seu servidor de banco de dados
  • Redução do número de plugins ativos

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