EAV Vergisi: Magento ürün yüklemeleri neden yavaştır
Magento kullanıcıları sık sık hızdan şikayet eder. Bu kullanıcıların çoğu, farkında olmadan bir EAV vergisi öder.
Magento'daki bir ürün tek bir satır değildir. Birçok tabloya dağılmış satırlar koleksiyonudur. Bir tablo statik sütunları tutar. Diğer tablolar ise varchar, int, decimal, text ve datetime gibi belirli veri türlerini tutar.
Tek bir ürünü yüklemek için Magento bu tabloların her birinden okuma yapar. Ardından bunları tekrar bir nesne (object) haline getirir. Eğer bir store view eklerseniz, iş yükü iki katına çıkar.
En büyük tuzak addAttributeToSelect('*') kullanmaktır.
Yıldız işareti (*), tüm öznitelikleri yüklediğiniz anlamına gelir. Eğer bir kategori sayfası 36 ürün gösteriyorsa, sadece isim ve fiyat gibi altı alana ihtiyaç duyabilir. Yıldız kullanırsanız, bunun yerine altmış alan yüklersiniz. Magento, sadece çöpe atmak için fazladan elli dört alanı okur, birleştirir ve işler.
Bunu beş dakika içinde düzeltebilirsiniz.
Yıldız kullanmayı bırakın. İhtiyacınız olan tam sütunları listeleyin:
- name
- price
- small_image
- url_key
- status
- visibility
Bu değişiklik, yavaş listeleme sayfaları için en büyük kazançtır.
Daha köklü bir çözüm için, listeleme sayfalarında ürünleri EAV'den yeniden birleştirmeyin. Kategori sayfaları ve arama işlemleri, indeks tablolarından ve OpenSearch'ten okuma yapmalıdır. Magento bu indeksleri sizin için yönetir. Hızlı bir kategori sayfası bu indekslere dayanır ve yalnızca şablonun (template) yazdırdığı birkaç öznitelik için EAV'ye dokunur.
Flat catalog özelliğini kullanmayın. Adobe, çok sayıda özniteliğiniz olduğunda hata verdiği için bu özelliği kullanımdan kaldırdı (deprecated). Bu özellik ağır bir indeksleme yükü getirir ve MySQL sütun sınırlarına takılır.
Daha iyi performans için bu kurallara uyun:
- Yalnızca isimlendirilmiş öznitelikleri seçin. Kullanıcılara sunulan koleksiyonlarda asla yıldız kullanmayın.
- Listeleme ve filtreleme için OpenSearch kullanın.
- Toplu dışa aktarımlar için entity_id üzerinden keyset pagination kullanın.
- Dışa aktarımlar için yalnızca ihtiyacınız olan alanları seçin.
Sonuçlarınızı ölçün. Sorgu günlüğünüzü (query log) açın. Eğer tek bir kategori sayfası yüzlerce sorgu çalıştırıyorsa, sebebi EAV yeniden birleştirmedir. Artık soruna neden olan kod satırını nasıl bulacağınızı biliyorsunuz.
Kaynak: https://dev.to/iamrobindhiman/the-eav-tax-why-magento-product-loads-are-slow-117h
