𝗘𝗔𝗩 𝗧𝗮𝘅: 𝗪𝗵𝘆 𝗠𝗮𝗴𝗲𝗻𝘁𝗼 𝗽𝗿𝗼𝗱𝘂𝗰𝘁 𝗹𝗼𝗮𝗱𝘀 𝗮𝗿𝗲 𝘀𝗹𝗼𝘄

Magento ব্যবহারকারীরা প্রায়শই গতি নিয়ে অভিযোগ করেন। এদের মধ্যে অনেকেই না জেনেই একটি EAV ট্যাক্স প্রদান করছেন।

Magento-তে একটি প্রোডাক্ট কোনো একটি মাত্র রো (row) নয়। এটি অনেকগুলো টেবিলের মধ্যে ছড়িয়ে থাকা অনেকগুলো রো-এর একটি সংগ্রহ। একটি টেবিলে স্ট্যাটিক কলাম থাকে। অন্যান্য টেবিলে varchar, int, decimal, text এবং datetime-এর মতো নির্দিষ্ট ডেটা টাইপ থাকে।

একটি প্রোডাক্ট লোড করতে Magento এই প্রতিটি টেবিল থেকে ডেটা পড়ে। এরপর সেগুলোকে একটি অবজেক্ট হিসেবে পুনরায় একত্রিত করে। আপনি যদি একটি স্টোর ভিউ (store view) যোগ করেন, তবে এই কাজের পরিমাণ দ্বিগুণ হয়ে যায়।

সবচেয়ে বড় ফাঁদ হলো addAttributeToSelect('*') ব্যবহার করা।

অ্যাস্টেরিস্ক (*) মানে হলো আপনি প্রতিটি অ্যাট্রিবিউট লোড করছেন। যদি একটি ক্যাটাগরি পেজে ৩৬টি প্রোডাক্ট দেখায়, তবে সেখানে হয়তো নাম এবং মূল্যের মতো মাত্র ছয়টি ফিল্ডের প্রয়োজন হতে পারে। কিন্তু আপনি যদি অ্যাস্টেরিস্ক ব্যবহার করেন, তবে আপনি পরিবর্তে ষাটটি ফিল্ড লোড করছেন। Magento অতিরিক্ত চুয়ান্নটি ফিল্ড পড়ে, জয়েন করে এবং প্রসেস করে, শুধুমাত্র সেগুলো ফেলে দেওয়ার জন্য।

আপনি মাত্র পাঁচ মিনিটে এটি ঠিক করতে পারেন।

অ্যাস্টেরিস্ক ব্যবহার করা বন্ধ করুন। আপনার ঠিক যে কলামগুলো প্রয়োজন তার একটি তালিকা দিন:

  • name
  • price
  • small_image
  • url_key
  • status
  • visibility

স্লো লিস্টিং পেজগুলোর জন্য এই পরিবর্তনটি হবে সবচেয়ে বড় সমাধান।

আরও কার্যকর সমাধানের জন্য, লিস্টিং পেজগুলোতে EAV থেকে প্রোডাক্ট পুনরায় একত্রিত করবেন না। ক্যাটাগরি পেজ এবং সার্চের ক্ষেত্রে ইনডেক্স টেবিল (index tables) এবং OpenSearch থেকে ডেটা পড়া উচিত। Magento আপনার জন্য এই ইনডেক্সগুলো বজায় রাখে। একটি দ্রুতগতির ক্যাটাগরি পেজ এই ইনডেক্সগুলোর ওপর নির্ভর করে এবং টেমপ্লেটটি প্রিন্ট করার জন্য প্রয়োজনীয় অল্প কিছু অ্যাট্রিবিউটের জন্য কেবল EAV ব্যবহার করে।

flat catalog ফিচারটি ব্যবহার করবেন না। Adobe এটি deprecate করে দিয়েছে কারণ অনেক বেশি অ্যাট্রিবিউট থাকলে এটি ব্যর্থ হয়। এটি ইনডেক্সিংয়ের কাজ বাড়িয়ে দেয় এবং MySQL কলামের লিমিট অতিক্রম করে ফেলে।

উন্নত পারফরম্যান্সের জন্য এই নিয়মগুলো অনুসরণ করুন:

  • শুধুমাত্র নির্দিষ্ট নামের অ্যাট্রিবিউট সিলেক্ট করুন। ইউজারদের জন্য রেন্ডার করা হয় এমন কালেকশনে কখনোই অ্যাস্টেরিস্ক (*) ব্যবহার করবেন না।
  • লিস্টিং এবং ফিল্টারিংয়ের জন্য OpenSearch ব্যবহার করুন।
  • বাল্ক এক্সপোর্টের (bulk exports) জন্য entity_id দিয়ে keyset pagination ব্যবহার করুন।
  • এক্সপোর্টের জন্য শুধুমাত্র প্রয়োজনীয় ফিল্ডগুলোই সিলেক্ট করুন।

আপনার ফলাফল পরিমাপ করুন। আপনার কুয়েরি লগ (query log) চালু করুন। যদি একটি মাত্র ক্যাটাগরি পেজ শত শত কুয়েরি চালায়, তবে EAV reassembly-ই এর কারণ। এখন আপনি জানেন কীভাবে সমস্যার কারণ সৃষ্টিকারী কোডের লাইনটি খুঁজে বের করতে হয়।

উৎস: https://dev.to/iamrobindhiman/the-eav-tax-why-magento-product-loads-are-slow-117h