HUSKY - Product Filter for WooCommerce

Como Acelerar a Filtragem de Produtos WooCommerce em Grandes Catálogos com HUSKY

Como Acelerar a Filtragem de Produtos WooCommerce em Grandes Catálogos com HUSKY

Quando uma loja WooCommerce cresce para além de vários milhares de produtos, o filtro de produtos pode tornar-se um gargalo. Cada taxonomy term precisa de uma count query, cada attribute adiciona um join, e Dynamic Recount multiplica o trabalho da base de dados. HUSKY (anteriormente WOOF) inclui vários mecanismos de caching e hooks incorporados, concebidos especificamente para grandes catálogos. Este artigo abrange apenas as funcionalidades que existem no código-fonte do plugin — sem configurações hipotéticas, sem hooks inventados.

Ativar Cache Dynamic Recount

Em HUSKY → Avançado → Opções, encontrará a configuração Cache dynamic recount number for each item in filter. Quando ativado, o HUSKY armazena os resultados do recount para cada term na tabela de opções do WordPress ou como um transient, para que os carregamentos de página subsequentes ignorem completamente as counting queries. Este é o interruptor mais eficaz para lojas que utilizam Dynamic Recount com muitos taxonomy terms.

O cache é limpo de acordo com um cronograma, não com as alterações de produtos. O intervalo é definido pela opção de auto-limpeza ao lado da configuração do cache (o prazo de expiração padrão é uma semana). Depois de adicionar ou importar um lote de produtos, pode limpá-lo manualmente com o botão clear cache no painel de administração.

Ativar Cache Terms

Ao lado do recount cache está a configuração Cache terms. Quando o formulário de filtro contém um grande número de terms (centenas de categorias de produtos, attributes ou tags), esta opção armazena em cache a lista de terms renderizada para que o HTML não precise ser reconstruído a cada carregamento de página.

Funciona da mesma forma que o recount cache: limpo de acordo com um cronograma, com o seu próprio intervalo de auto-limpeza e um botão clear terms cache no admin. Para lojas com árvores de categorias profundamente aninhadas ou muitos attribute values, ativar ambos os caches juntos reduz substancialmente a carga da base de dados por pedido.

Usar Turbo Mode para dados de produtos pré-gerados

Turbo Mode é a otimização mais poderosa que o HUSKY oferece para grandes catálogos. Quando ativado, ele pré-gera um flat file contendo os product IDs filtrados para cada combinação de active terms. Em vez de construir e executar complexas WP_Query + tax_query + meta_query em cada filter request, o plugin lê um arquivo pré-calculado — a diferença no tempo de resposta é frequentemente uma ordem de magnitude.

O Turbo Mode é configurado em HUSKY → Extensões → Turbo Mode. A regeneração do arquivo pode ser agendada via WordPress cron ou, para maior confiabilidade, via um crontab de servidor real (consulte as FAQ sobre a configuração do Turbo Mode cron).

Ajustar o limite de produtos do Turbo Mode

Por padrão, o Turbo Mode processa até 15,000 produtos durante a geração do cache. Em lojas com mais produtos, a geração para antes que todos os produtos sejam indexados. Use o woof_turbo_mode_products_limit hook para aumentar este limite:

add_filter('woof_turbo_mode_products_limit', function($limit) {
    // Increase limit for catalogs larger than 15,000 products
    return 50000;
});

O hook está localizado em ext/turbo_mode/index.php:277. Defina o valor alto o suficiente para cobrir todo o seu catálogo, mas esteja atento ao PHP execution time e aos memory limits durante a geração do arquivo.

Otimizar o Counter Method para grandes sites

O sistema Dynamic Recount usa um contador baseado em WP_Query que pode consumir memória significativa em lojas com muitos produtos. O woof_counter_method hook (fonte: classes/counter.php) permite que você mude para um método de contagem mais leve que define nopaging=false e posts_per_page=1, reduzindo a memória por query ao custo de contagens potencialmente menos precisas:

add_filter('woof_counter_method', function($saving_memory) {
    // Enable memory-saving counter mode
    return true;
});

Teste isso primeiro no seu site staging — funciona bem em algumas configurações, mas não em todas.

Personalizar a Filter Query com woof_products_query

O woof_products_query filter hook (fonte: index.php) passa o array completo $query_args antes que a WP_Query seja executada. Use-o para adicionar custom meta queries, excluir certos produtos ou ajustar a query structure para desempenho:

add_filter('woof_products_query', function($query_args) {
    // Exclude products that should never appear in filter results
    $query_args['meta_query'][] = array(
        'key'     => '_exclude_from_filter',
        'compare' => 'NOT EXISTS'
    );
    return $query_args;
});

Para manipulações em nível de taxonomy (alterar relation operators entre taxonomies), use o woof_main_query_tax_relations hook relacionado.

Ativar WordPress Object Cache para dados de filtro

O HUSKY suporta o woof_use_wp_cache hook para rotear seus dados internos através do WordPress object cache. Se você já usa um persistent object cache backend (Redis, Memcached), ativar este hook move os dados do filtro para fora do banco de dados e para um armazenamento rápido in-memory storage:

add_filter('woof_use_wp_cache', function($is){
    return true;
});

Importante: Este hook não tem efeito sem um plugin de persistent object caching instalado. Não é um substituto para as configurações de cache incorporadas — ele as complementa quando o seu ambiente de hospedagem suporta object caching.

Combinar configurações para melhores resultados

A linha de base recomendada para um grande catálogo (mais de 10,000 produtos, muitos taxonomy terms):

  • Ativar Cache dynamic recount e Cache terms em Avançado → Opções
  • Ativar Turbo Mode e definir o limite de produtos para corresponder ao tamanho do seu catálogo
  • Aplicar woof_use_wp_cache se um persistent object cache estiver disponível
  • Testar woof_counter_method em staging para ver se o modo de economia de memória funciona para sua configuração
  • Usar woof_products_query apenas quando precisar excluir produtos específicos dos resultados do filtro

Comece com os dois interruptores de cache incorporados — eles não exigem alterações de código e proporcionam a melhoria mais notável por si só.