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:
- Habilitar
post__inmétodo (Solução 1) - Adicionar índices de banco de dados (Solução 2A)
- 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.phppara 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
- Adicione o código ao seu
functions.php - Limpar todos os caches (navegador, WordPress, servidor)
- Teste uma pesquisa que antes era lenta
- 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/