HUSKY - Product Filter for WooCommerce

Cómo acelerar el filtrado de productos de WooCommerce en catálogos grandes con HUSKY

Cómo acelerar el filtrado de productos de WooCommerce en catálogos grandes con HUSKY

Cuando una tienda de WooCommerce crece más allá de varios miles de productos, el filtro de productos puede convertirse en un cuello de botella. Cada taxonomy term necesita una count query, cada attribute añade un join, y Dynamic Recount multiplica el trabajo de la base de datos. HUSKY (anteriormente WOOF) incluye varios mecanismos de caching y hooks integrados diseñados específicamente para catálogos grandes. Este artículo cubre solo las características que existen en el código fuente del plugin — sin configuraciones hipotéticas, sin hooks inventados.

Habilitar Cache Dynamic Recount

En HUSKY → Avanzado → Opciones encontrará la configuración Cache dynamic recount number for each item in filter. Cuando está habilitado, HUSKY almacena los resultados del recount para cada term en la tabla de opciones de WordPress o como un transient, de modo que las cargas de página posteriores omiten completamente las counting queries. Este es el interruptor más efectivo para tiendas que usan Dynamic Recount con muchos taxonomy terms.

El cache se vacía según un horario, no con los cambios de productos. El intervalo se establece mediante la opción de auto-limpieza junto a la configuración del cache (la caducidad predeterminada es una semana). Después de añadir o importar un lote de productos, puede vaciarlo manualmente con el botón clear cache en el panel de administración.

Habilitar Cache Terms

Junto al recount cache se encuentra la configuración Cache terms. Cuando el formulario de filtro contiene un gran número de terms (cientos de categorías de productos, attributes o tags), esta opción almacena en cache la lista de terms renderizada para que el HTML no necesite ser reconstruido en cada carga de página.

Funciona de la misma manera que el recount cache: se vacía según un horario, con su propio intervalo de auto-limpieza y un botón clear terms cache en el admin. Para tiendas con árboles de categorías profundamente anidados o muchos attribute values, habilitar ambos caches juntos reduce sustancialmente la carga de la base de datos por solicitud.

Usar Turbo Mode para datos de productos pregenerados

Turbo Mode es la optimización más potente que HUSKY ofrece para catálogos grandes. Cuando está habilitado, pre-genera un flat file que contiene los product IDs filtrados para cada combinación de active terms. En lugar de construir y ejecutar complejos WP_Query + tax_query + meta_query en cada filter request, el plugin lee un archivo pre-calculado — la diferencia en el tiempo de respuesta es a menudo un orden de magnitud.

Turbo Mode se configura en HUSKY → Extensiones → Turbo Mode. La regeneración del archivo se puede programar a través de WordPress cron o, para mayor fiabilidad, a través de un crontab de servidor real (consulte las FAQ sobre la configuración de Turbo Mode cron).

Ajustar el límite de productos de Turbo Mode

Por defecto, Turbo Mode procesa hasta 15,000 productos durante la generación del cache. En tiendas con más productos, la generación se detiene antes de que todos los productos sean indexados. Use el woof_turbo_mode_products_limit hook para aumentar este límite:

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

El hook se encuentra en ext/turbo_mode/index.php:277. Establezca el valor lo suficientemente alto como para cubrir todo su catálogo, pero tenga en cuenta el PHP execution time y los memory limits durante la generación del archivo.

Optimizar el Counter Method para sitios grandes

El sistema Dynamic Recount utiliza un contador basado en WP_Query que puede consumir una memoria significativa en tiendas con muchos productos. El woof_counter_method hook (fuente: classes/counter.php) le permite cambiar a un método de conteo más ligero que establece nopaging=false y posts_per_page=1, reduciendo la memoria por query a costa de conteos potencialmente menos precisos:

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

Pruebe esto primero en su sitio staging — funciona bien en algunas configuraciones pero no en todas.

Personalizar la Filter Query con woof_products_query

El woof_products_query filter hook (fuente: index.php) pasa el array completo $query_args antes de que se ejecute el WP_Query. Úselo para añadir custom meta queries, excluir ciertos productos o ajustar la query structure para el rendimiento:

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 manipulaciones a nivel de taxonomy (cambiar relation operators entre taxonomies), use el woof_main_query_tax_relations hook relacionado.

Habilitar WordPress Object Cache para datos de filtro

HUSKY soporta el woof_use_wp_cache hook para enrutar sus datos internos a través del WordPress object cache. Si ya utiliza un persistent object cache backend (Redis, Memcached), habilitar este hook mueve los datos del filtro fuera de la base de datos y a un almacenamiento rápido en memoria:

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

Importante: Este hook no tiene efecto sin un plugin de persistent object caching instalado. No es un reemplazo para las configuraciones de cache integradas — las complementa cuando su entorno de hosting soporta object caching.

Combinar configuraciones para obtener los mejores resultados

La línea base recomendada para un catálogo grande (más de 10,000 productos, muchos taxonomy terms):

  • Habilitar Cache dynamic recount y Cache terms en Avanzado → Opciones
  • Habilitar Turbo Mode y establecer el límite de productos para que coincida con el tamaño de su catálogo
  • Aplicar woof_use_wp_cache si un persistent object cache está disponible
  • Probar woof_counter_method en staging para ver si el modo de ahorro de memoria funciona para su configuración
  • Usar woof_products_query solo cuando necesite excluir productos específicos de los resultados del filtro

Comience con los dos interruptores de cache integrados — no requieren cambios de código y ofrecen la mejora más notable por sí solos.