Eğitimler

WooCommerce Hız Optimizasyonu; Sepet ve Ödeme Sayfası Yavaşlığını Giderme

WooCommerce sepet ve ödeme sayfanız yavaş mı? Cart fragments ayarları, akıllı önbellekleme ve gereksiz istekleri kaldırarak hızı %40'a kadar artırın. Site yöneticileri için pratik rehber.

Eğitimler

Sepet sayfanız 6 saniyede yükleniyor ve müşteri gitti

Hemen şimdi sitenizin /cart sayfasını açın. Sepetin ve ödeme butonunun tamamen gelmesi 3 ila 8 saniye sürüyorsa, müşteri orada sayfayı kapatır. Bu sadece bir sezgi değil; Google verileri, mobil ziyaretlerin %53'ünün 3 saniyenin üzerindeki yüklemelerde terk edildiğini söylüyor. Bir WooCommerce mağazası için bu, terk edilmiş bir alışveriş sepeti anlamına gelir, sadece düşük bir ziyaret değil.

Sorun nerede? WooCommerce varsayılan olarak sepet sayfasının tamamını her küçük değişiklikte (adet değişimi, ürün silme, kargo yöntemi seçimi) yeniden oluşturur. Bu, sunucuya her biri veritabanına birçok sorgu gönderen birkaç ağır AJAX isteği demektir. Çözüm, cart fragments ayarının doğru yapılmasıdır.

Cart fragments nedir ve sitenizi neden yavaşlatır

WooCommerce, sayfayı tamamen yenilemeden sepeti güncellemek için fragments adı verilen parçalar kullanır. Her fragment, sepette bir değişiklik olduktan sonra yeniden yüklenmesi gereken bir HTML bölümüdür. Sorun, diğer eklentiler (kargo eklentisi veya özel kodlar gibi) yeni fragmentler kaydettiğinde başlar ve WooCommerce, her değişiklikte tüm bu bölümleri veritabanından yeniden okumak zorunda kalır.

Bu sorunun belirtisini tanıyor musunuz? Chrome DevTools ile Network sekmesine bakıp sepete bir ürün eklerseniz, her biri 1-2 saniye süren birden fazla ?wc-ajax=add_to_cart isteği görürsünüz. İşte burada hata yapılır: Site yöneticisi sorunun hostingden kaynaklandığını düşünüp plan yükseltmeye gider, oysa sorun gereksiz fragmentlerin sayısı ve boyutudur.

Sorunu teşhis kodu

Hangi fragmentlerin kayıtlı olduğunu görmek için bu kodu alt temanın functions.php dosyasına ekleyin:

add_action('wp_footer', function() {
    if (is_cart() || is_checkout()) {
        $fragments = WC_AJAX::get_refreshed_fragments();
        echo '<!-- Fragments: ' . count($fragments) . ' -->';
    }
});

Fragment sayısı 10'un üzerindeyse, siteniz gereğinden fazla çalışıyor demektir. Normal durum 4 ila 7 fragment arasındadır.

Fragmentleri doğru ayarlama; üç pratik adım

Birinci adım: Gerçekten kullanılan fragmentleri koruyun. Temanız sepet ürün sayısını başlıkta gösteriyorsa, bu fragmente ihtiyacınız var demektir. Göstermiyorsa, kaldırın:

add_filter('woocommerce_add_to_cart_fragments', function($fragments) {
    // Başlıkta kullanılmıyorsa sepet sayısı fragmentini kaldır
    unset($fragments['a.cart-contents']);
    return $fragments;
});

İkinci adım: Giriş yapmamış kullanıcılar için sepet sayfasını önbelleğe alma. WooCommerce varsayılan olarak sepet sayfasını giriş yapmış kullanıcılar için önbelleğe almaz, çünkü her kullanıcının bilgileri farklıdır. Ancak henüz giriş yapmamış misafir kullanıcılar için önbelleği etkinleştirebilirsiniz. WP Rocket veya LiteSpeed Cache gibi bir önbellek eklentisi kullanıyorsanız, "misafir kullanıcılar için önbellek" seçeneğini etkinleştirin. Sepet sayfasının yüklenme süresini %40'a kadar azaltabilecek tek şey budur.

Üçüncü adım: Sepet sayfasında gereksiz scriptleri devre dışı bırakma. WooCommerce, gerekli olmasa bile tüm sayfalarda birçok script yükler. Bu kod, yalnızca sepet sayfasında gerekli scriptleri yükler:

add_action('wp_enqueue_scripts', function() {
    if (is_cart()) {
        wp_dequeue_script('wc-checkout');
        wp_dequeue_script('wc-city-select');
    }
}, 20);

Ödeme sayfalarını önbelleğe alma; herkesin hata yaptığı yer

Ödeme sayfasını (/checkout) asla tamamen önbelleğe almayın. Bu sayfa, her kullanıcı için benzersiz olan güvenlik formları, ödeme alanları ve CSRF tokenleri içerir. Önbelleğe almak, bir sonraki müşterinin süresi dolmuş token içeren bir form görmesi ve ödemenin "geçersiz token" hatasıyla başarısız olması anlamına gelir.

Ancak ödeme sayfasının statik bölümlerini önbelleğe alabilirsiniz: logo, yardım metinleri, ikonlar. Bunu, sayfanın tamamının HTML'ini değil, statik varlıkları (CSS ve JS) önbelleğe alarak yapın. Önbellek eklentilerinin genellikle "ödeme sayfasını önbellekten çıkar" seçeneği vardır. Böyle bir seçenek görmüyorsanız, bu kodu wp-config.php dosyasına ekleyin:

define('DONOTCACHEPAGE', true);

Bu sabit, tüm geçerli önbellek eklentilerine bu sayfayı önbelleğe almamalarını söyler. Ancak yalnızca ödeme sayfasının önbellekten çıkarılmasını ve sitenin geri kalanının önbellekte kalmasını istiyorsanız, aşağıdaki filtreyi kullanın:

add_filter('woocommerce_checkout_redirect_empty_cart', function() {
    if (!is_user_logged_in()) {
        // Misafir kullanıcıyı sepet sayfasına yönlendir
        return true;
    }
    return false;
});

Veritabanının WooCommerce hızındaki rolü; kimsenin bakmadığı şey

Fragmentleri ayarladıktan sonra sıra veritabanına gelir. WooCommerce, her AJAX isteği için wp_options ve wp_postmeta tablolarına birkaç sorgu gönderir. Mağazanızda 10 binden fazla sipariş varsa ve her siparişte 20 meta veri varsa, wp_postmeta tablonuz 200 binden fazla satıra sahiptir. Doğru indeks olmadan, bu tabloya yapılan her sorgu birkaç yüz milisaniye sürer.

Hangi tabloların ağır olduğunu görmek için phpMyAdmin'de bu sorguyu çalıştırın:

SELECT table_name, ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'MB' 
FROM information_schema.tables 
WHERE table_schema = 'your_db_name' 
ORDER BY (data_length + index_length) DESC LIMIT 10;

wp_postmeta 500 MB'ın üzerindeyse, temizlik zamanı gelmiştir. WP-Optimize gibi eklentiler, hiçbir gönderiye bağlı olmayan satırlar olan orphan meta verilerini silebilir. Bu işlem genellikle veritabanı boyutunu %20-30 azaltır ve sorgu hızını belirgin şekilde artırır.

Öncesi ve sonrası ölçümü; sayı olmadan hiçbir optimizasyon anlam ifade etmez

Herhangi bir değişiklikten önce temel bir ölçüm alın. Hız testi araçları kullanın ve TTFB (ilk bayta kadar geçen süre) değerini not edin. TTFB 800 milisaniyenin üzerindeyse, sorun sunucu tarafındadır ve fragment ayarları yardımcı olmaz. Önce hostingi kontrol etmelisiniz.

Değişiklikleri uyguladıktan sonra tekrar ölçün. Görmeniz gereken değer: TTFB 400 milisaniyenin altında ve sepet sayfasının tam yüklenme süresi 2 saniyenin altında. Bu değere ulaşamadıysanız, iki olasılık vardır: ya harici istekler gönderen (üçüncü taraf API'lere çağrılar gibi) ağır bir eklentiniz var ya da temanız gereksiz scriptler yüklüyor.

Teşhis için Chrome DevTools'u açın, Performance sekmesine tıklayın ve sepet sayfasını yenileyin. 500 milisaniyeden uzun süren istekleri arayın. Genellikle suçlu, harici alan adlarına yapılan isteklerdir (Google Fonts veya üçüncü taraf CDN'ler gibi). Bu istekleri Asset CleanUp gibi bir eklentiyle devre dışı bırakabilirsiniz.

Açık bir seçim: Tam sayfa önbelleği mi yoksa parça önbelleği mi?

Mağazanız 500'den az ürüne sahipse ve günlük trafik 10 bin ziyaretin altındaysa, ürün ve kategori sayfaları için tam sayfa önbelleği yeterlidir ve fragmentlere dokunmayın. Ancak büyük bir mağazanız varsa ve müşteriler sürekli sepeti değiştiriyorsa, tam önbellek değil, fragmentlerle parça önbelleği işe yarar.

Misafir kullanıcı için sepet sayfasını tamamen önbelleğe almak yaygın bir hatadır. WooCommerce sepeti çerezde değil, kullanıcı oturumunda saklar. Sepet sayfasını önbelleğe alırsanız, bir sonraki kullanıcı önceki kullanıcının sepetini görür. Müşterinin "neden sepetim benim almadığım şeylerle dolu?" diye aradığı bug tam olarak budur.

Güvenli yol: Parça önbelleği kullanın ve yalnızca tüm kullanıcılar arasında aynı olan bölümleri önbelleğe alın. WooCommerce bunu zaten fragmentlerle yapar, sadece sayılarını azaltmanız gerekir.

Altyapı; her şey doğru olduğunda ama site hâlâ yavaş olduğunda

Bazen tüm bu ayarlardan sonra site hâlâ yavaştır. Burada altyapıya bakmalısınız. Paylaşımlı hosting kullanıyorsanız ve siteniz aylık 50 binden fazla ziyaret alıyorsa, daha özel kaynaklara sahip bir WordPress hostinge geçiş zamanı gelmiştir. WooCommerce, CPU ve RAM kısıtlamaları olan paylaşımlı hostingde en optimize kodlarla bile 2 saniyenin altında yüklenemez.

Geçişten önce şu testi yapın: Mevcut hosting panelinde, yoğun saatlerde CPU kullanımını kontrol edin. %80'in üzerindeyse, sorun altyapıdandır. %40'ın altındaysa, sorun kodunuzdadır ve geçiş yardımcı olmaz. Bu ayrımı ciddiye alın; birçok kişi geçiş ücreti öder ve sonra sorunun kötü kodlanmış bir eklentiden kaynaklandığını anlar.

Sürekli hız izleme için, her 5 dakikada bir sepet sayfasını kontrol eden ve yükleme 3 saniyeyi aşarsa size e-posta gönderen bir uptime kontrol aracı kurun. Bunu ücretsiz izleme araçlarıyla yapabilirsiniz. Yanlış alarm olmadan uyarı ayarlamak için site uptime izleme rehberine bakın.

Sıkça Sorulan Sorular

WooCommerce sepet sayfam neden yavaş?

Sepet sayfasının yavaşlığının genellikle üç nedeni vardır: Her değişiklikte yeniden oluşturulan çok sayıda cart fragment, misafir kullanıcılar için önbellek eksikliği ve wp_postmeta'daki gereksiz satırlar nedeniyle veritabanının ağırlığı. Bu makaledeki komutlarla üçünü de kontrol edin.

WooCommerce ödeme sayfasını önbelleğe almak güvenli midir?

Hayır. Ödeme sayfası, her kullanıcı için üretilen tek kullanımlık güvenlik tokenleri içerir. Önbelleğe almak, ödeme sırasında "geçersiz token" hatasına neden olur. Bu sayfanın yalnızca statik varlıklarını önbelleğe alın, tamamını değil.

Cart fragments sayısını nasıl azaltabilirim?

Alt temanın functions.php dosyasına woocommerce_add_to_cart_fragments filtresini ekleyerek gereksiz fragmentleri kaldırabilirsiniz. Önce makaledeki teşhis koduyla mevcut sayıyı görün, ardından temanızın gerçekten kullandığı fragmentleri koruyun.

TTFB ile tam yükleme süresi arasındaki fark nedir?

TTFB, sunucunun ilk yanıt baytını göndermek için harcadığı süredir. Tam yükleme süresi, sayfanın tüm öğelerinin görüntülenmesine kadar geçen toplam süredir. TTFB yüksekse, sorun sunucu veya veritabanındandır. TTFB düşükse ancak tam yükleme süresi yüksekse, sorun script ve görsel boyutlarındandır.

ServerNet Destek

ServerNet mühendislik ve yayın ekibi — altyapı, ağ ve web barındırma uzmanları.

WordPress Hosting
Paylaş:

Yorumlar 0

Henüz yorum yok — ilk siz olun!

Yorum bırakın

İlgili hizmet

WordPress Hosting

LiteSpeed Enterprise ve NVMe üzerinde WordPress'e özel altyapı — otomatik kurulum, güvenli güncelleme, staging ve sizi Google'da üstte tutan önbellek.