EAV ٹیکس: Magento پروڈکٹ لوڈز کیوں سست ہیں
Magento صارفین اکثر رفتار کے بارے میں شکایت کرتے ہیں۔ ان میں سے بہت سے صارفین نادانستہ طور پر EAV ٹیکس ادا کر رہے ہوتے ہیں۔
Magento میں ایک پروڈکٹ محض ایک رو (row) نہیں ہوتی۔ یہ بہت سے ٹیبلز میں بکھرے ہوئے روز (rows) کا ایک مجموعہ ہے۔ ایک ٹیبل میں اسٹیٹک کالمز ہوتے ہیں۔ دیگر ٹیبلز میں مخصوص ڈیٹا ٹائپس جیسے varchar, int, decimal, text, اور datetime ہوتے ہیں۔
ایک پروڈکٹ لوڈ کرنے کے لیے، Magento ان میں سے ہر ٹیبل سے ڈیٹا پڑھتا ہے۔ پھر یہ انہیں دوبارہ ایک آبجیکٹ (object) میں جوڑ دیتا ہے۔ اگر آپ اسٹور ویو (store view) شامل کرتے ہیں، تو کام دوگنا ہو جاتا ہے۔
سب سے بڑا جال addAttributeToSelect('*') کا استعمال کرنا ہے۔
ایسٹرک (asterisk) کا مطلب ہے کہ آپ ہر ایٹریبیوٹ لوڈ کر رہے ہیں۔ اگر ایک کیٹیگری پیج 36 پروڈکٹس دکھاتا ہے، تو اسے شاید صرف نام اور قیمت جیسے چھ فیلڈز کی ضرورت ہو۔ اگر آپ ایسٹرک استعمال کرتے ہیں، تو آپ اس کے بجائے ساٹھ فیلڈز لوڈ کر لیتے ہیں۔ Magento ان چون پچاس اضافی فیلڈز کو پڑھتا ہے، جوڑتا ہے اور پروسیس کرتا ہے، صرف انہیں ضائع کرنے کے لیے۔
آپ اسے پانچ منٹ میں ٹھیک کر سکتے ہیں۔
ایسٹرک کا استعمال بند کریں۔ صرف وہی کالمز لسٹ کریں جن کی آپ کو ضرورت ہے:
- name
- price
- small_image
- url_key
- status
- visibility
یہ تبدیلی سست لسٹنگ پیجز کے لیے سب سے بڑی کامیابی ہے۔
زیادہ گہرے حل کے لیے، لسٹنگ پیجز پر EAV سے پروڈکٹس کو دوبارہ ترتیب (reassemble) نہ دیں۔ کیٹیگری پیجز اور سرچ کو انڈیکس ٹیبلز اور OpenSearch سے ڈیٹا پڑھنا چاہیے۔ Magento آپ کے لیے یہ انڈیکس برقرار رکھتا ہے۔ ایک تیز رفتار کیٹیگری پیج ان انڈیکسز پر انحصار کرتا ہے اور EAV کو صرف ان چند ایٹریبیوٹس کے لیے استعمال کرتا ہے جو ٹیمپلیٹ پر پرنٹ ہوتے ہیں۔
flat catalog فیچر کا استعمال نہ کریں۔ Adobe نے اسے ختم (deprecate) کر دیا ہے کیونکہ بہت زیادہ ایٹریبیوٹس ہونے کی صورت میں یہ ناکام ہو جاتا ہے۔ یہ انڈیکسنگ کے کام کو بڑھا دیتا ہے اور MySQL کالم کی حدود (limits) کو متاثر کرتا ہے۔
بہتر کارکردگی کے لیے ان اصولوں پر عمل کریں:
- صرف نامزد ایٹریبیوٹس (named attributes) منتخب کریں۔ ان کلیکشنز میں کبھی بھی ایسٹرک استعمال نہ کریں جو صارفین کو دکھائی جاتی ہیں۔
- لسٹنگ اور فلٹرنگ کے لیے OpenSearch استعمال کریں۔
- بلک ایکسپورٹس (bulk exports) کے لیے،
entity_idکے ذریعے keyset pagination استعمال کریں۔ - ایکسپورٹس کے لیے صرف وہی فیلڈز منتخب کریں جن کی آپ کو ضرورت ہے۔
اپنے نتائج کا جائزہ لیں۔ اپنا کوئری لاگ (query log) آن کریں۔ اگر ایک ہی کیٹیگری پیج سینکڑوں کوئریز چلا رہا ہے، تو EAV ری اسمبلی (reassembly) ہی اس کی وجہ ہے۔ اب آپ جانتے ہیں کہ اس مسئلے کا باعث بننے والی کوڈ کی لائن کو کیسے تلاش کرنا ہے۔
Source: https://dev.to/iamrobindhiman/the-eav-tax-why-magento-product-loads-are-slow-117h
