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:
post__inyöntemini etkinleştirin (Çözüm 1)- Veritabanı indeksleri ekleyin (Çözüm 2A)
- Ö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.phpdosyası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
- Kodu
functions.phpdosyanıza ekleyin - Tüm önbellekleri temizleyin (tarayıcı, WordPress, sunucu)
- Daha önce yavaş olan bir aramayı test edin
- 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/