WordPress'i Optimize Ederken Öğrenilen En İyi Dersler (Müşteri Başarısı İçin)
Yayınlanan: 2022-09-15En son ne zaman bir bulut dokuz anınız oldu?
Okulu uçarak geçmek mi yoksa kız arkadaşın/erkek arkadaşın teklifini kabul ettiğinde mi?
İki hafta önce dokuz dakika önce bir bulut yaşadım! Hindistan'ın en büyük WordCamp'i olan WordCamp Mumbai 2017'de konuşuyordum.
Konu kalbime yakın bir şeydi ve her gün uğraştığım bir şeydi - müşteri başarısı için WordPress'i optimize etmekten alınan dersler.
Büyük WordPress veritabanlarıyla uğraşırken karşılaştığım sorunlar ve bunlarla nasıl başa çıktığımla ilgili.
Beni WordCamp Mumbai'de konuşmaya ne teşvik etti?
Bir WordPress eklentisi geliştirmek harika bir öğrenme deneyimidir. Mükemmel bir çerçeveyi genişletir, müşterilerin sorunlarını çözen kod yazmaya odaklanır ve harika ekip üyeleriyle çalışırsınız.
StoreApps'te geliştiriciler yalnızca kod yazmakla kalmaz, aynı zamanda müşterileri de destekler. Müşteri sorgularını çözmek bana en büyük derslerden bazılarını verdi.
Yani tüm bunlar benim günlük rutinim ve oldukça heyecan verici.
Ama benim için daha heyecan verici olan ne biliyor musun? Büyük veritabanlarıyla çalışmak ve karmaşık veri tabanı sorunlarını çözmek!
Eklentilerimiz 35000'den fazla kullanıcı tarafından kullanılmaktadır. Ve büyük WooCommerce mağazaları ve popüler WordPress siteleriyle çalışırken birçok zorluk gördüm.
Neyse ki, bu zorlukları çözebildim ve çok şey öğrendim.
Ama bekleyin, tıpkı benim gibi, WordPress ve WooCommerce ile çalışan benzer sorunlarla karşılaşan yüzlerce başka geliştirici olacaktır.
Bu yüzden derslerimi başkalarıyla paylaşmaya karar verdim.
Ve Hindistan'ın en büyük WordCamp'inde bir konuşma fırsatından daha iyi bir platform!
Bana uykusuz geceler yaşatan üç sorun (Çözümleri ve Onlardan Öğrenilen Derslerle)
Son olarak, bahsettiğim üç problem burada. O halde tek tek onlarla başlayalım.
Sayfa yükleme süresi 3 dakikadan milisaniyeye düşürülüyor…
Sorun
Akıllı Kuponlar eklentisinde, mağazanın önemli sayfalarında (yani alışveriş sepeti, ödeme ve hesabım sayfaları) kuponları görüntülemenin basit bir işlevinin ödeme sürecini durdurduğu bir durumla karşılaştım.
Akıllı Kuponlar , bir WooCommerce mağazası için toplu olarak kuponların ve hediye sertifikalarının oluşturulması ve işlenmesi için bir eklentidir.
Çözüm
Şimdi, WP Sorgusu kullanmak, belirli bir kullanıcı için mevcut kuponları göstermek için birden fazla JOIN ile sonuçlanacaktı, değerlendirilmek için birden fazla meta koşul gerektiriyor.
Bu yüzden veritabanını sorgulamanın ideal yolunu yani WP Query kullanmak yerine özel SQL sorguları yazdım .
Ayrıca, özel sorgularda yaptığım şey şuydu:
- Tek bir MySQL sorgusunda tüm meta koşulları kontrol etmek yerine, sadece ilk meta koşulunu değerlendirdim.
- Bundan sonra, seçenekler tablosunda virgülle ayrılmış post_ids (kupon kimlikleri) listesini sakladım.
- Ve sonra, diğer meta koşulların her birini değerlendirerek aynı post_ids kümesini basitçe eşledim.
Bunu, belirli bir kullanıcı için gösterilmesi gereken son bir post_ids kümesini alana kadar yaptım.
Çözümü geliştirmek
Bu, sayfa yükleme sorunlarını çözdü. Ancak sayfanın yüklenmesini milisaniyelerin altına indirebilmek için arkadaşımızın önerdiği gibi sorunu yeniden tanımlamam gerekti.
Kullanıcının uygun olduğu tüm kuponları göstermek yerine,
Sepet ve ödeme sayfalarında kullanıcılara gösterilecek kupon sayısına bir sınır koydum.
Eklentimizin en çok satan özelliği nasıl zaman aşımı hatası oldu?
Sorun
Çok büyük bir veritabanı güncellemesini işlemek için, temel WordPress işlevlerini kullanmak büyük bir ek yük olacağından özel sorgular yazmıştım.
Örnek: Bir kişinin mağazasındaki tüm ürünlerin fiyatlarını %40 oranında düşürmesi gerekiyorsa, o zaman 'Fiyat', '%40 oranında azalt' seçeneğini seçmesi ve güncelleme düğmesine basması yeterlidir. Bu, WooCommerce mağazalarınızdaki toplu güncellemeleri kolaylaştırmak için tasarlanmış Smart Manager eklentimizi kullanarak kolayca mümkündür.
Ancak, toplu güncelleme işlemi durmaya ve herhangi biri 1k ürünü veya tüm mağazayı aynı anda güncellemeye çalıştığında zaman aşımı hataları vermeye başladı.
Başlangıçta sorguları optimize etmeye başladım ama bu yardımcı olmadı.
Durumum Takeshi's Castle yarışmacısına benziyordu. Ne kadar denersem deneyeyim, suya düşmeye devam ettim.
Çözüm
Bazen sorunun dışına çıkmanız ve kesin nedeni bulmak için soruna kuş bakışı bakmanız gerektiği söylenir.
Ben de aynısını yaptım ve asıl sorunun
sorgu düzeyinde değil, istek düzeyinde .
Yaptığım şey, tüm güncellemeleri yapan tek bir istek yerine, aynı şeyi daha küçük toplu güncellemeler yapan ve zaman aşımı hatalarını tamamen ortadan kaldıran birden çok ardışık AJAX çağrısına böldüm.
Çözümü geliştirmek
Şimdi, tek isteği birden çok daha küçük AJAX isteğine ayırma yaklaşımı, yalnızca zaman aşımı hatasını çözmekle kalmadı, aynı zamanda toplu güncelleme UX'i de geliştirdi .
Şimdi mağaza müdürü, ürüne olan güvenlerini artıran güncellemenin ilerleyişi hakkında bilgilendiriliyordu.
Ayrıca, aynı yaklaşım, Smart Manager'ın herhangi bir şekil ve boyuttaki WooCommerce mağazası için toplu güncellemeleri yönetmesini sağladı ve Smart Manager'ı StoreApps'in en çok satan eklentilerinden biri haline getirdi.
Paylaşılan barındırma ortamları bizi eklentimizi yeniden yazmaya nasıl zorladı?
Sorun
Herhangi bir raporlama eklentisi için, istatistiklerin yalnızca doğru değil, aynı zamanda hızlı raporlanmasını sağlamak çok önemlidir. Şimdi, raporlama istatistiklerini almak , 2 ana WordPress tablosunun, yani gönderiler ve postmeta'nın birleştirilmesini içeren birden fazla sorgu gerektiriyordu.
Yukarıda görüldüğü gibi, JOIN'ler çok pahalıdır .
Smart Reporter'da (WooCommerce için raporlama çözümümüz), tek bir sayfa görünümünde ve bu da sayfa yüklemesinde 20 farklı raporlama istatistiği gösteriyorduk.
Çözüm
Bu nedenle, özet tablo, yani düz yapılı özel tablo oluşturan çoğu raporlama çözümünün izlediği aynı yaklaşımı izledim.
Bu tablo, eklentinin gerektirdiği tüm verilerin özetini içerecek ve böylece birleştirme kullanımını ortadan kaldıracak ve sayfa yükleme sürelerini iyileştirecektir.
Ayrıca, bu özet tabloları güncel tutmak için WordPress eylemlerini ve filtrelerini kullandık.
ders özeti
- Mümkün olduğunca en iyi uygulamaları takip edin
- Döngüde sorgu yok
- Büyük karmaşık birleştirmelerden kaçının
- MySQL düzeyinde PHP düzeyinden daha fazlasını yapın
- Kodda daha derine inin
- Özet / Özel / Geçici tablolar
- UX'e dikkat – yanıt verme, bildirimler…
- Doğru sorunu çözüyor musunuz?
Senin seçimin ne?
Eminim bazı büyük sorunlarla uğraşmış ve bunlara çözümler bulmuşsunuzdur. Aşağıdaki yorumlar bölümümüzde bize bildirin. Okurlar için gerçekten değerli olurdu.