EAV ਟੈਕਸ: Magento ਪ੍ਰੋਡਕਟ ਲੋਡ ਕਿਉਂ ਹੌਲੀ ਹਨ

Magento ਉਪਭੋਗਤਾ ਅਕਸਰ ਰਫ਼ਤਾਰ ਬਾਰੇ ਸ਼ਿਕਾਇਤ ਕਰਦੇ ਹਨ। ਇਨ੍ਹਾਂ ਵਿੱਚੋਂ ਬਹੁਤ ਸਾਰੇ ਉਪਭੋਗਤਾ ਜਾਣੇ-ਅਣਜਾਣੇ ਵਿੱਚ EAV ਟੈਕਸ ਭਰਦੇ ਹਨ।

Magento ਵਿੱਚ ਇੱਕ ਪ੍ਰੋਡਕਟ ਕੋਈ ਇੱਕ ਸਿੰਗਲ ਰੋਅ (row) ਨਹੀਂ ਹੁੰਦਾ। ਇਹ ਕਈ ਟੇਬਲਾਂ ਵਿੱਚ ਖਿੰਡੀਆਂ ਹੋਈਆਂ ਰੋਅਜ਼ ਦਾ ਇੱਕ ਸਮੂਹ ਹੁੰਦਾ ਹੈ। ਇੱਕ ਟੇਬਲ ਸਟੈਟਿਕ ਕਾਲਮਾਂ ਨੂੰ ਰੱਖਦਾ ਹੈ। ਹੋਰ ਟੇਬਲਾਂ ਵਿੱਚ varchar, int, decimal, text, ਅਤੇ datetime ਵਰਗੇ ਖਾਸ ਡੇਟਾ ਟਾਈਪ ਹੁੰਦੇ ਹਨ।

ਇੱਕ ਪ੍ਰੋਡਕਟ ਨੂੰ ਲੋਡ ਕਰਨ ਲਈ, Magento ਇਹਨਾਂ ਵਿੱਚੋਂ ਹਰ ਇੱਕ ਟੇਬਲ ਤੋਂ ਡੇਟਾ ਪੜ੍ਹਦਾ ਹੈ। ਫਿਰ ਇਹ ਉਹਨਾਂ ਨੂੰ ਵਾਪਸ ਇੱਕ ਆਬਜੈਕਟ (object) ਵਿੱਚ ਜੋੜਦਾ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ ਸਟੋਰ ਵਿਊ (store view) ਜੋੜਦੇ ਹੋ, ਤਾਂ ਕੰਮ ਦੁੱਗਣਾ ਹੋ ਜਾਂਦਾ ਹੈ।

ਸਭ ਤੋਂ ਵੱਡਾ ਜਾਲ addAttributeToSelect('*') ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਹੈ।

ਐਸਟੈਰਿਸਕ (*) ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਤੁਸੀਂ ਹਰ ਇੱਕ ਐਟਰੀਬਿਊਟ (attribute) ਨੂੰ ਲੋਡ ਕਰ ਰਹੇ ਹੋ। ਜੇਕਰ ਕੋਈ ਕੈਟਾਗਰੀ ਪੇਜ 36 ਪ੍ਰੋਡਕਟ ਦਿਖਾਉਂਦਾ ਹੈ, ਤਾਂ ਉਸਨੂੰ ਸ਼ਾਇਦ ਸਿਰਫ਼ ਨਾਮ ਅਤੇ ਕੀਮਤ ਵਰਗੇ ਛੇ ਫੀਲਡਾਂ ਦੀ ਲੋੜ ਹੋਵੇ। ਜੇਕਰ ਤੁਸੀਂ ਐਸਟੈਰਿਸਕ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਇਸ ਦੀ ਬਜਾਏ ਸੱਠ ਫੀਲਡਾਂ ਲੋਡ ਕਰਦੇ ਹੋ। Magento ਫਿਰ 54 ਵਾਧੂ ਫੀਲਡਾਂ ਨੂੰ ਪੜ੍ਹਦਾ ਹੈ, ਜੋੜਦਾ ਹੈ ਅਤੇ ਪ੍ਰੋਸੈਸ ਕਰਦਾ ਹੈ, ਸਿਰਫ਼ ਉਹਨਾਂ ਨੂੰ ਫ਼ੇਰ ਸੁੱਟਣ ਲਈ।

ਤੁਸੀਂ ਇਸ ਨੂੰ ਪੰਜ ਮਿੰਟਾਂ ਵਿੱਚ ਠੀਕ ਕਰ ਸਕਦੇ ਹੋ।

ਐਸਟੈਰਿਸਕ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਬੰਦ ਕਰੋ। ਉਹਨਾਂ ਸਹੀ ਕਾਲਮਾਂ ਦੀ ਸੂਚੀ ਬਣਾਓ ਜਿਨ੍ਹਾਂ ਦੀ ਤੁਹਾਨੂੰ ਲੋੜ ਹੈ:

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

ਇਹ ਬਦਲਾਅ ਹੌਲੀ ਲਿਸਟਿੰਗ ਪੇਜਾਂ ਲਈ ਸਭ ਤੋਂ ਵੱਡੀ ਜਿੱਤ ਹੈ।

ਡੂੰਘੇ ਹੱਲ ਲਈ, ਲਿਸਟਿੰਗ ਪੇਜਾਂ 'ਤੇ EAV ਤੋਂ ਪ੍ਰੋਡਕਟਾਂ ਨੂੰ ਦੁਬਾਰਾ ਇਕੱਠਾ ਨਾ ਕਰੋ। ਕੈਟਾਗਰੀ ਪੇਜਾਂ ਅਤੇ ਸਰਚ ਨੂੰ ਇੰਡੈਕਸ ਟੇਬਲਾਂ (index tables) ਅਤੇ OpenSearch ਤੋਂ ਡੇਟਾ ਪੜ੍ਹਨਾ ਚਾਹੀਦਾ ਹੈ। Magento ਤੁਹਾਡੇ ਲਈ ਇਹ ਇੰਡੈਕਸ ਬਣਾਈ ਰੱਖਦਾ ਹੈ। ਇੱਕ ਤੇਜ਼ ਕੈਟਾਗਰੀ ਪੇਜ ਇਹਨਾਂ ਇੰਡੈਕਸਾਂ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ ਅਤੇ ਸਿਰਫ਼ ਉਹਨਾਂ ਕੁਝ ਐਟਰੀਬਿਊਟਾਂ ਲਈ EAV ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਜੋ ਟੈਂਪਲੇਟ ਪ੍ਰਿੰਟ ਕਰਦਾ ਹੈ।

ਫਲੈਟ ਕੈਟਾਲਾਗ (flat catalog) ਫੀਚਰ ਦੀ ਵਰਤੋਂ ਨਾ ਕਰੋ। Adobe ਨੇ ਇਸ ਨੂੰ ਬੰਦ (deprecated) ਕਰ ਦਿੱਤਾ ਹੈ ਕਿਉਂਕਿ ਜਦੋਂ ਤੁਹਾਡੇ ਕੋਲ ਬਹੁਤ ਸਾਰੇ ਐਟਰੀਬਿਊਟ ਹੁੰਦੇ ਹਨ ਤਾਂ ਇਹ ਫੇਲ੍ਹ ਹੋ ਜਾਂਦਾ ਹੈ। ਇਹ ਇੰਡੈਕਸਿੰਗ ਦਾ ਭਾਰੀ ਕੰਮ ਵਧਾਉਂਦਾ ਹੈ ਅਤੇ MySQL ਕਾਲਮ ਦੀਆਂ ਸੀਮਾਵਾਂ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦਾ ਹੈ।

ਬਿਹਤਰ ਪ੍ਰਦਰਸ਼ਨ ਲਈ ਇਹਨਾਂ ਨਿਯਮਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ:

  • ਸਿਰਫ਼ ਨਾਮ ਵਾਲੇ ਐਟਰੀਬਿਊਟ ਚੁਣੋ। ਉਹਨਾਂ ਕਲੈਕਸ਼ਨਾਂ (collections) ਵਿੱਚ ਕਦੇ ਵੀ ਐਸਟੈਰਿਸਕ ਦੀ ਵਰਤੋਂ ਨਾ ਕਰੋ ਜੋ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਦਿਖਾਈ ਦਿੰਦੀਆਂ ਹਨ।
  • ਲਿਸਟਿੰਗ ਅਤੇ ਫਿਲਟਰਿੰਗ ਲਈ 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