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 WooCommerce supera varios miles de productos, el filtro de productos puede convertirse en un cuello de botella. Cada término de taxonomía necesita una consulta de recuento, cada atributo añade una unión y el recuento dinámico multiplica el trabajo de la base de datos. HUSKY (antes WOOF) incluye varios mecanismos de caché integrados y hooks diseñados específicamente para catálogos grandes.

Habilitar Caché de Recuento Dinámico

En HUSKY → Advanced → Options encontrarás el ajuste Cache dynamic recount number for each item in filter. Cuando está habilitado, HUSKY almacena los resultados de recuento para cada término en la tabla de opciones de WordPress o como un transient, por lo que las cargas de página posteriores omiten por completo las consultas de recuento. Este es el conmutador más efectivo para tiendas que usan Recuento Dinámico con muchos términos de taxonomía.

La caché se limpia según un programa, no con los cambios de productos. El intervalo se establece mediante la opción de limpieza automática junto al ajuste de caché (la caducidad predeterminada es una semana). Después de añadir o importar un lote de productos, puedes vaciarla manualmente con el botón clear cache en el panel de administración.

Habilitar Caché de Términos

Junto a la caché de recuento se encuentra el ajuste Cache terms. Cuando el formulario de filtro contiene un gran número de términos (cientos de categorías de productos, atributos o etiquetas), esta opción almacena en caché la lista de términos renderizada para que no sea necesario reconstruir el HTML en cada carga de página.

Funciona de la misma manera que la caché de recuento: se limpia según un programa, con su propio intervalo de limpieza automática y un botón clear terms cache en el administrador. Para tiendas con árboles de categorías profundamente anidados o muchos valores de atributos, habilitar ambas cachés juntas reduce sustancialmente la carga de la base de datos por solicitud.

Usar Turbo Mode para datos de producto pregenerados

Turbo Mode es la optimización más potente que HUSKY ofrece para catálogos grandes. Cuando está habilitado, genera previamente un archivo de datos JSON con los parámetros de los productos. En lugar de construir y ejecutar complejas WP_Query + tax_query + meta_query en cada solicitud de filtro, el plugin lee datos precalculados; en catálogos grandes, la diferencia en el tiempo de respuesta es sustancial.

Turbo Mode se configura en HUSKY → Extensions → Turbo Mode. La regeneración de archivos se puede programar mediante el cron de WordPress o, para mayor fiabilidad, mediante un crontab real del servidor (consulta las preguntas frecuentes sobre la configuración de cron de Turbo Mode).

Ajustar el límite de productos de Turbo Mode

Por defecto, Turbo Mode procesa hasta 15.000 productos durante la generación de caché. En tiendas con más productos, la generación se detiene antes de que todos los productos sean indexados. Usa el hook woof_turbo_mode_products_limit 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. Establece el valor lo suficientemente alto para cubrir todo tu catálogo, pero ten en cuenta los límites de tiempo de ejecución y memoria de PHP durante la generación del archivo.

Optimizar el método de recuento para sitios grandes

El sistema de recuento dinámico utiliza un contador basado en WP_Query que puede consumir una cantidad significativa de memoria en tiendas con muchos productos. El hook woof_counter_method (fuente: classes/counter.php) te permite cambiar a un método de recuento más ligero que establece nopaging=false y posts_per_page=1, reduciendo la memoria por consulta:

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

Prueba esto primero en tu sitio de staging: funciona bien en algunas configuraciones pero no en todas.

Personalizar la salida de productos con woof_products_query

El hook de filtro woof_products_query (fuente: index.php) pasa el array $query_args del shortcode [woof_products] antes de que se ejecute su WP_Query. Úsalo para añadir consultas de metadatos personalizadas, excluir ciertos productos de la salida o ajustar la estructura de la consulta:

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 taxonomía (cambiar operadores de relación entre taxonomías), usa el hook relacionado woof_main_query_tax_relations.

Habilitar la caché de objetos de WordPress para datos de filtro

HUSKY admite el hook woof_use_wp_cache para enrutar sus datos internos a través de la caché de objetos de WordPress. Si ya usas un backend de caché de objetos persistente (Redis, Memcached), habilitar este hook mueve los datos del filtro fuera de la base de datos y los almacena en una memoria rápida:

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

Importante: Este hook no tiene efecto sin un plugin de caché de objetos persistente instalado. No es un reemplazo de los ajustes de caché integrados: los complementa cuando tu entorno de alojamiento admite la caché de objetos.

Combinar ajustes para obtener los mejores resultados

La línea base recomendada para un catálogo grande (10.000+ productos, muchos términos de taxonomía):

  • Habilitar Cache dynamic recount y Cache terms en Advanced → Options
  • Habilitar Turbo Mode y establecer el límite de productos según el tamaño de tu catálogo
  • Aplicar woof_use_wp_cache si hay una caché de objetos persistente disponible
  • Probar woof_counter_method en el entorno de staging para ver si el modo de ahorro de memoria funciona en tu configuración
  • Usar woof_products_query solo cuando necesites ajustar la consulta de salida de [woof_products]

Comienza con los dos conmutadores de caché integrados: no requieren cambios de código y ofrecen la mejora más notable por sí solos.