𝗧𝗵𝗲 𝗘𝗔𝗩 𝗧𝗮𝘅: 𝗪𝗵𝘆 𝗠𝗮𝗴𝗲𝗻𝘁𝗼 𝗽𝗿𝗼𝗱𝘂𝗰𝘁 𝗹𝗼𝗮𝗱𝘀 𝗮𝗿𝗲 𝘀𝗹𝗼𝘄
Magento उपयोगकर्ता अक्सर गति (speed) को लेकर शिकायत करते हैं। इनमें से कई उपयोगकर्ता अनजाने में ही EAV टैक्स चुका रहे होते हैं।
Magento में एक प्रोडक्ट केवल एक सिंगल रो (row) नहीं होता। यह कई टेबल्स में बिखरी हुई रोज़ (rows) का एक संग्रह है। एक टेबल में स्टैटिक कॉलम होते हैं। अन्य टेबल्स में varchar, int, decimal, text और datetime जैसे विशिष्ट डेटा प्रकार (data types) होते हैं।
एक प्रोडक्ट लोड करने के लिए, Magento इन सभी टेबल्स में से प्रत्येक को पढ़ता है। फिर यह उन्हें वापस एक ऑब्जेक्ट (object) में जोड़ देता है। यदि आप एक स्टोर व्यू (store view) जोड़ते हैं, तो यह काम दोगुना हो जाता है।
सबसे बड़ा जाल addAttributeToSelect('*') का उपयोग करना है।
एस्टेरिस्क (*) का अर्थ है कि आप हर एट्रिब्यूट (attribute) को लोड कर रहे हैं। यदि कोई कैटेगरी पेज 36 प्रोडक्ट्स दिखाता है, तो उसे केवल नाम और कीमत जैसे छह फ़ील्ड्स की आवश्यकता हो सकती है। यदि आप एस्टेरिस्क का उपयोग करते हैं, तो आप इसके बजाय साठ फ़ील्ड्स लोड करते हैं। Magento उन चौवन अतिरिक्त फ़ील्ड्स को पढ़ता है, जॉइन करता है और प्रोसेस करता है, केवल उन्हें अंत में हटाने के लिए।
आप इसे पाँच मिनट में ठीक कर सकते हैं।
एस्टेरिस्क का उपयोग करना बंद करें। केवल उन्हीं कॉलम की सूची दें जिनकी आपको आवश्यकता है:
- name
- price
- small_image
- url_key
- status
- visibility
यह बदलाव धीमी लिस्टिंग पेजों के लिए सबसे बड़ी जीत है।
अधिक गहरे समाधान के लिए, लिस्टिंग पेजों पर EAV से प्रोडक्ट्स को फिर से असेंबल (reassemble) न करें। कैटेगरी पेजों और सर्च को इंडेक्स टेबल्स (index tables) और OpenSearch से डेटा पढ़ना चाहिए। Magento आपके लिए इन इंडेक्स को बनाए रखता है। एक तेज़ कैटेगरी पेज इन्हीं इंडेक्स पर निर्भर करता है और EAV को केवल उन कुछ एट्रिब्यूट्स के लिए छूता है जिन्हें टेम्पलेट प्रिंट करता है।
फ्लैट कैटलॉग (flat catalog) फीचर का उपयोग न करें। Adobe ने इसे हटा (deprecated) दिया है क्योंकि बहुत अधिक एट्रिब्यूट्स होने पर यह विफल हो जाता है। यह इंडेक्सिंग के काम को भारी बना देता है और MySQL कॉलम की सीमाओं को पार कर जाता है।
बेहतर प्रदर्शन के लिए इन नियमों का पालन करें:
- केवल नामित (named) एट्रिब्यूट्स चुनें। उन कलेक्शंस (collections) में कभी भी एस्टेरिस्क का उपयोग न करें जो उपयोगकर्ताओं को दिखाए जाते हैं।
- लिस्टिंग और फ़िल्टरिंग के लिए OpenSearch का उपयोग करें।
- बल्क एक्सपोर्ट के लिए, entity_id द्वारा keyset pagination का उपयोग करें।
- एक्सपोर्ट के लिए केवल उन्हीं फ़ील्ड्स को चुनें जिनकी आपको आवश्यकता है।
अपने परिणामों को मापें। अपना क्वेरी लॉग (query log) चालू करें। यदि एक सिंगल कैटेगरी पेज सैकड़ों क्वेरी चलाता है, तो EAV रीअसेंबली ही इसका कारण है। अब आप जानते हैं कि समस्या पैदा करने वाली कोड की लाइन को कैसे ढूँढना है।
स्रोत: https://dev.to/iamrobindhiman/the-eav-tax-why-magento-product-loads-are-slow-117h
