HUSKY - Product Filter for WooCommerce

如何使用HUSKY加速大型WooCommerce产品目录的筛选

如何使用HUSKY加速大型WooCommerce产品目录的筛选

当 WooCommerce 商店的产品数量超过几千个时,产品筛选可能成为性能瓶颈。每个分类术语都需要计数查询,每个属性都会增加一次关联查询,而动态重新计数则会成倍增加数据库工作。HUSKY(原名 WOOF)包含多个专为大型商品目录设计的内置缓存机制和钩子。

启用缓存动态重新计数

HUSKY → 高级 → 选项中,您可以找到缓存筛选器中每个项目的动态重新计数结果设置。启用后,HUSKY 会将每个术语的重新计数结果存储在 WordPress 选项表或作为瞬态数据保存,这样后续页面加载将完全跳过计数查询。对于使用动态重新计数且包含大量分类术语的商店,这是最有效的开关。

缓存会按计划清除,而不是在产品变更时清除。清除间隔由缓存设置旁边的自动清除选项设定(默认过期时间为一周)。在添加或导入一批产品后,您可以通过管理面板中的清除缓存按钮手动刷新缓存。

启用缓存术语

在重新计数缓存旁边是缓存术语设置。当筛选表单包含大量术语(数百个产品分类、属性或标签)时,此选项会缓存渲染后的术语列表,从而无需在每个页面加载时重新构建 HTML。

其工作方式与重新计数缓存相同:按计划清除,拥有自己的自动清除间隔以及管理面板中的清除术语缓存按钮。对于具有深层嵌套分类树或大量属性值的商店,同时启用这两个缓存可以显著减少每次请求的数据库负载。

使用涡轮模式预生成产品数据

涡轮模式是 HUSKY 为大型商品目录提供的最强大的优化功能。启用后,它会预生成一个包含产品参数的 JSON 数据文件。插件无需在每个筛选请求中构建并执行复杂的 WP_Query + tax_query + meta_query 查询,而是读取预先计算好的数据——在大型商品目录上,响应时间的差异非常显著。

涡轮模式在HUSKY → 扩展 → 涡轮模式下配置。文件重新生成可以通过 WordPress 计划任务调度,或者为了可靠性,通过真实的服务器 crontab 调度(参见关于涡轮模式 cron 设置的常见问题)。

调整涡轮模式产品数量限制

默认情况下,涡轮模式在缓存生成期间最多处理 15,000 个产品。对于产品更多的商店,生成过程会在所有产品被索引之前停止。使用 woof_turbo_mode_products_limit 钩子来提高此限制:

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

该钩子位于 ext/turbo_mode/index.php 中。将值设置得足够高以覆盖整个商品目录,但要注意文件生成期间的 PHP 执行时间和内存限制。

为大型站点优化计数器方法

动态重新计数系统使用基于 WP_Query 的计数器,在拥有大量产品的商店中可能会消耗大量内存。woof_counter_method 钩子(来源:classes/counter.php)允许您切换为更轻量的计数方法,该方法设置 nopaging=falseposts_per_page=1,从而减少每次查询的内存占用:

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

请先在您的测试站点上测试此方法——它在某些配置上效果良好,但并非所有配置都适用。

使用 woof_products_query 自定义产品输出

woof_products_query 筛选钩子(来源:index.php)在 [woof_products] 短代码的 $query_args 数组传递给其 WP_Query 运行之前,将其传递出去。使用它来添加自定义元查询、从输出中排除某些产品或调整查询结构:

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;
});

对于分类级别的操作(更改分类之间的关联运算符),请使用相关的 woof_main_query_tax_relations 钩子。

为筛选数据启用 WordPress 对象缓存

HUSKY 支持使用 woof_use_wp_cache 钩子将其内部数据路由到 WordPress 对象缓存。如果您已经使用持久对象缓存后端(Redis、Memcached),启用此钩子会将筛选数据从数据库移动到快速的内存存储中:

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

重要提示:如果没有安装持久对象缓存插件,此钩子不会生效。它不能替代内置缓存设置——当您的主机环境支持对象缓存时,它是内置缓存的补充。

组合设置以获得最佳效果

对于大型商品目录(10,000+ 个产品,大量分类术语)的推荐基准配置:

  • 在高级 → 选项中启用缓存动态重新计数缓存术语
  • 启用涡轮模式并将产品限制设置为与您的商品目录大小匹配
  • 如果可用持久对象缓存,应用 woof_use_wp_cache
  • 在测试站点上测试 woof_counter_method,以查看内存节省模式是否适用于您的配置
  • 仅在需要调整 [woof_products] 输出查询时使用 woof_products_query

从两个内置缓存开关开始——它们无需修改代码,单独使用就能带来最显著的改进。