HUSKY - Products Filter Professional for WooCommerce

如何加速 WOOF 文本过滤器搜索

如果您的网站有大量产品(3000+),并且在使用以下插件时遇到搜索性能缓慢的问题 [woof_text_filter],本指南将帮助您进行优化。

问题

默认情况下,HUSKY 使用 SQL JOIN 方法进行搜索,这在大数据库上可能会变慢。文本搜索需要 10 秒以上以及类别过滤导致延迟是常见症状。

Solution 1: Enable Fast Search Method (post__in)

该插件内置了更快的搜索方法,它使用 post__in 而不是 SQL JOINs。这对于大型产品目录来说效率更高。

实现

将这单行添加到您的主题的 functions.php 文件:

add_filter('woof_husky_query_post__in', '__return_true');

预期结果

  • 文本搜索速度:从 10+ 秒缩短到 1-3 秒
  • 添加代码后立即生效
  • 无需数据库更改

解决方案 2:优化类别过滤

如果启用快速搜索后类别筛选仍然很慢,您有两个选择:

选项 A:添加数据库索引(推荐)

数据库索引通过优化来极大地加快分类查询速度 term_relationshipsterm_taxonomy 表格。

将此代码添加到您的 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);
}

How it works:

  • 首次加载管理员页面时运行一次
  • 创建优化的数据库索引
  • 存储完成标志以防止重复运行

Expected Results:

  • 分类过滤:从几秒钟到小于 1 秒
  • 永久解决方案(索引在代码删除后保留)

选项 B:缓存分类查询

如果您无法修改数据库结构或想要不同的方法,缓存可以显著提高性能。

将此代码添加到您的 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);
    }
}

How it works:

  • 缓存类别过滤器结果 1 小时
  • 为每个过滤器组合生成唯一的缓存键
  • Returns cached product IDs on subsequent identical searches

Expected Results:

  • 第一次搜索:正常速度
  • Subsequent identical searches: Near-instant results
  • 缓存将在 1 小时后自动过期

使用哪种解决方案?

对于文本搜索速度问题:

使用解决方案 1 (post__in filter) – 这是最简单有效的方法。

对于类别过滤速度问题:

使用解决方案 2A (数据库索引) 如果:

  • 您拥有数据库访问权限
  • 您想要永久优化
  • 您需要所有查询的一致速度

使用解决方案 2B (缓存) 如果:

  • 您无法修改数据库结构
  • 您的用户经常重复相同的搜索
  • You have variable search patterns

组合解决方案:

您可以安全地一起使用所有解决方案以获得最佳性能:

  1. Enable post__in 方法(解决方案 1)
  2. 添加数据库索引(解决方案 2A)
  3. 添加缓存(解决方案 2B)– 可选,用于额外提速

重要提示

  • 需要子主题: 始终将代码添加到子主题的 functions.php 以防止在主题更新过程中丢失
  • 备份优先:在添加数据库索引之前,请备份您的数据库
  • 测试环境: 如果可能,请先在暂存站点上测试解决方案
  • 缓存清除: 如果使用缓存解决方案,请记住缓存结果每小时更新一次

测试您的更改

  1. Add the code to your functions.php
  2. Clear all caches (browser, WordPress, server)
  3. 测试以前缓慢的搜索
  4. 监控搜索时间改进

服务器端优化

如果这些解决方案仍无法提供足够的改进,请考虑:

  • 升级到更快的托管
  • 启用对象缓存 (Redis/Memcached)
  • 优化您的数据库服务器配置
  • 减少活动插件数量

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