HUSKY - Product Filter for WooCommerce

WooCommerce Ürün Aramasını Hızlandırma (HUSKY Metin Filtresi)

Sitenizde çok sayıda ürün (3000+) varsa ve WooCommerce ürün araması [woof_text_filter] ile yavaş çalışıyorsa, bu kılavuz optimizasyon yapmanıza yardımcı olacaktır.

Sorun

Varsayılan olarak HUSKY, aramalar için SQL JOIN yöntemini kullanır ve büyük veritabanlarında yavaşlayabilir. Metin aramalarının 10+ saniye sürmesi ve kategori filtrelemesinin gecikmelere neden olması yaygın belirtilerdir.

Çözüm 1: Hızlı Arama Yöntemini Etkinleştirin (post__in)

Eklenti, SQL JOIN'ler yerine post__in kullanan yerleşik bir daha hızlı arama yöntemine sahiptir. Bu, büyük ürün katalogları için çok daha verimlidir.

Uygulama

Bu tek satırı temanızın functions.php dosyasına ekleyin:

add_filter('woof_husky_query_post__in', '__return_true');

Beklenen Sonuçlar

  • Metin arama hızı: 10+ saniyeden 1-3 saniyeye düşer
  • Kodu ekledikten hemen sonra çalışır
  • Veritabanı değişikliği gerektirmez

Çözüm 2: Kategori Filtrelemeyi Optimize Edin

Hızlı aramayı etkinleştirdikten sonra kategori filtrelemesi hâlâ yavaşsa, iki seçeneğiniz var:

Seçenek A: Veritabanı İndeksleri Ekleyin (Önerilir)

Veritabanı indeksleri, term_relationships ve term_taxonomy tablolarını optimize ederek kategori sorgularını önemli ölçüde hızlandırır.

Bu kodu functions.php dosyanıza ekleyin:

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

Nasıl çalışır:

  • İlk yönetici sayfası yüklendiğinde bir kez çalışır
  • Optimize edilmiş veritabanı indeksleri oluşturur
  • Tekrar çalışmayı önlemek için tamamlama bayrağı saklar

Beklenen Sonuçlar:

  • Kategori filtrelemesi: Birkaç saniyeden < 1 saniyeye düşer
  • Kalıcı çözüm (indeksler kod kaldırıldıktan sonra kalır)

Seçenek B: Kategori Sorgularını Önbelleğe Alın

Veritabanı yapısını değiştiremiyorsanız veya farklı bir yaklaşım istiyorsanız, önbelleğe alma iyi bir performans iyileştirmesi sağlar.

Bu kodu functions.php dosyanıza ekleyin:

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

Nasıl çalışır:

  • Kategori filtresi sonuçlarını 1 saat boyunca önbelleğe alır
  • Her filtre kombinasyonu için benzersiz önbellek anahtarı oluşturur
  • Sonraki aynı aramalarda önbelleğe alınmış ürün kimliklerini döndürür

Beklenen Sonuçlar:

  • İlk arama: Normal hız
  • Sonraki aynı aramalar: Neredeyse anında sonuç
  • Önbellek 1 saat sonra otomatik olarak süresi dolar

Hangi Çözümü Kullanmalısınız?

Metin Arama Hızı Sorunları İçin:

Çözüm 1'i kullanın (post__in filtresi) – bu en kolay ve en etkili düzeltmedir.

Kategori Filtreleme Hızı Sorunları İçin:

Çözüm 2A'yı kullanın (Veritabanı İndeksleri) eğer:

  • Veritabanına erişiminiz varsa
  • Kalıcı optimizasyon istiyorsanız
  • Tüm sorgular için tutarlı hız gerekiyorsa

Çözüm 2B'yi kullanın (Önbelleğe Alma) eğer:

  • Veritabanı yapısını değiştiremiyorsanız
  • Kullanıcılarınız sık sık aynı aramaları tekrarlıyorsa
  • Değişken arama desenleriniz varsa

Çözümleri Birleştirme:

Maksimum performans için tüm çözümleri birlikte güvenle kullanabilirsiniz:

  1. post__in yöntemini etkinleştirin (Çözüm 1)
  2. Veritabanı indeksleri ekleyin (Çözüm 2A)
  3. Önbelleğe alma ekleyin (Çözüm 2B) – ek hız için isteğe bağlı

Önemli Notlar

  • Alt Tema Gerekli: Kodları her zaman bir alt temanın functions.php dosyasına ekleyin, böylece tema güncellemeleri sırasında kaybolmaz
  • Önce Yedekleyin: Veritabanı indeksleri eklemeden önce veritabanınızı yedekleyin
  • Test Ortamı: Mümkünse çözümleri önce hazırlık sitesinde test edin
  • Önbellek Temizleme: Önbellek çözümü kullanıyorsanız, önbelleğe alınan sonuçların saatlik olarak güncellendiğini unutmayın

Değişikliklerinizi Test Etme

  1. Kodu functions.php dosyanıza ekleyin
  2. Tüm önbellekleri temizleyin (tarayıcı, WordPress, sunucu)
  3. Daha önce yavaş olan bir aramayı test edin
  4. Arama süresindeki iyileşmeyi izleyin

Sunucu Tarafı Optimizasyonu

Bu çözümler yeterli iyileştirme sağlamazsa, şunları değerlendirin:

  • Daha hızlı hosting'e yükseltme
  • Nesne önbelleğe almayı etkinleştirme (Redis/Memcached)
  • Veritabanı sunucu yapılandırmanızı optimize etme
  • Aktif eklenti sayısını azaltma

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