HUSKY - Product Filter for WooCommerce

HUSKY ile Büyük Kataloglarda WooCommerce Ürün Filtrelemeyi Hızlandırma

HUSKY ile Büyük Kataloglarda WooCommerce Ürün Filtrelemeyi Hızlandırma

Bir WooCommerce mağazası birkaç bin ürünün üzerine çıktığında, ürün filtresi bir darboğaz haline gelebilir. Her taxonomy term bir count query gerektirir, her attribute bir join ekler ve Dynamic Recount veritabanı işini katlar. HUSKY (eski adıyla WOOF), büyük kataloglar için özel olarak tasarlanmış çeşitli yerleşik caching mekanizmaları ve hooks içerir. Bu makale yalnızca eklenti kaynak kodunda bulunan özellikleri kapsar — varsayımsal ayarlar veya uydurma hooks içermez.

Cache Dynamic Recount'u Etkinleştirin

HUSKY → Gelişmiş → Seçenekler bölümünde Cache dynamic recount number for each item in filter ayarını bulacaksınız. Etkinleştirildiğinde, HUSKY her term için recount sonuçlarını WordPress options table'ında veya bir transient olarak depolar, böylece sonraki sayfa yüklemeleri counting queries'i tamamen atlar. Bu, Dynamic Recount'u birçok taxonomy term ile kullanan mağazalar için en etkili tek ayardır.

Cache, ürün değişikliklerinde değil, bir programa göre temizlenir. Aralık, cache ayarının yanındaki otomatik temizleme seçeneğiyle belirlenir (varsayılan sona erme süresi bir haftadır). Bir ürün grubunu ekledikten veya içe aktardıktan sonra, yönetici panelindeki clear cache düğmesiyle manuel olarak temizleyebilirsiniz.

Cache Terms'i Etkinleştirin

Recount cache'in yanında Cache terms ayarı bulunur. Filtre formu çok sayıda term (yüzlerce ürün kategorisi, attributes veya tags) içerdiğinde, bu seçenek render edilmiş term listesini önbelleğe alır, böylece HTML'nin her sayfa yüklemesinde yeniden oluşturulması gerekmez.

Recount cache ile aynı şekilde çalışır: bir programa göre temizlenir, kendi otomatik temizleme aralığına ve yönetici panelinde bir clear terms cache düğmesine sahiptir. Derinlemesine iç içe geçmiş kategori ağaçlarına veya birçok attribute values'a sahip mağazalar için, her iki cache'i birlikte etkinleştirmek, istek başına veritabanı yükünü önemli ölçüde azaltır.

Önceden Oluşturulmuş Ürün Verileri için Turbo Mode Kullanın

Turbo Mode, HUSKY'nin büyük kataloglar için sunduğu en güçlü optimizasyondur. Etkinleştirildiğinde, aktif terms'in her kombinasyonu için filtrelenmiş product IDs içeren bir flat file önceden oluşturur. Her filter request'te karmaşık WP_Query + tax_query + meta_query oluşturmak ve yürütmek yerine, eklenti önceden hesaplanmış bir dosyayı okur — yanıt süresindeki fark genellikle bir büyüklük sırasındadır.

Turbo Mode, HUSKY → Uzantılar → Turbo Mode altında yapılandırılır. Dosya yenileme, WordPress cron aracılığıyla veya güvenilirlik için gerçek bir sunucu crontab aracılığıyla planlanabilir (Turbo Mode cron kurulumu hakkındaki SSS'ye bakın).

Turbo Mode Ürün Limitini Ayarlayın

Varsayılan olarak Turbo Mode, cache oluşturma sırasında 15,000 ürüne kadar işlem yapar. Daha fazla ürüne sahip mağazalarda, tüm ürünler indekslenmeden önce oluşturma durur. Bu limiti yükseltmek için woof_turbo_mode_products_limit hook'unu kullanın:

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

Hook, ext/turbo_mode/index.php:277 konumunda bulunur. Değeri tüm kataloğunuzu kapsayacak kadar yüksek ayarlayın, ancak dosya oluşturma sırasında PHP execution time ve memory limits'i göz önünde bulundurun.

Büyük Siteler için Counter Method'u Optimize Edin

Dynamic Recount sistemi, birçok ürüne sahip mağazalarda önemli miktarda bellek tüketebilen WP_Query tabanlı bir sayaç kullanır. woof_counter_method hook'u (kaynak: classes/counter.php), nopaging=false ve posts_per_page=1 ayarlayan daha hafif bir sayma yöntemine geçmenizi sağlar, bu da potansiyel olarak daha az kesin sayımlar pahasına query başına belleği azaltır:

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

Bunu önce staging sitenizde test edin — bazı yapılandırmalarda iyi çalışır, ancak hepsinde değil.

Filter Query'yi woof_products_query ile Özelleştirin

woof_products_query filter hook'u (kaynak: index.php), WP_Query yürütülmeden önce tam $query_args dizisini iletir. Özel custom meta queries eklemek, belirli ürünleri hariç tutmak veya performans için query structure'ı ayarlamak için kullanın:

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

Taxonomy düzeyindeki manipülasyonlar (taxonomies arasındaki relation operators'ı değiştirmek) için ilgili woof_main_query_tax_relations hook'unu kullanın.

Filtre Verileri için WordPress Object Cache'i Etkinleştirin

HUSKY, dahili verilerini WordPress object cache aracılığıyla yönlendirmek için woof_use_wp_cache hook'unu destekler. Zaten bir persistent object cache backend (Redis, Memcached) kullanıyorsanız, bu hook'u etkinleştirmek filtre verilerini veritabanından hızlı in-memory storage'a taşır:

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

Önemli: Bu hook, yüklü bir persistent object caching eklentisi olmadan hiçbir etkiye sahip değildir. Yerleşik cache ayarlarının yerine geçmez — barındırma ortamınız object caching'i desteklediğinde onları tamamlar.

En İyi Sonuçlar için Ayarları Birleştirin

Büyük bir katalog (10,000+ ürün, birçok taxonomy term) için önerilen temel:

  • Gelişmiş → Seçenekler bölümünde Cache dynamic recount ve Cache terms'i etkinleştirin
  • Turbo Mode'u etkinleştirin ve ürün limitini katalog boyutunuza uyacak şekilde ayarlayın
  • Bir persistent object cache mevcutsa woof_use_wp_cache'i uygulayın
  • Bellek tasarrufu modunun kurulumunuz için çalışıp çalışmadığını görmek için woof_counter_method'u staging'de test edin
  • woof_products_query'yi yalnızca belirli ürünleri filtre sonuçlarından hariç tutmanız gerektiğinde kullanın

İki yerleşik cache anahtarıyla başlayın — bunlar kod değişikliği gerektirmez ve tek başlarına en belirgin iyileşmeyi sağlarlar.