एंटरप्राइज़ 1.14.1 श्रेणी पृष्ठों पर 35 सेकंड प्लस लोड समय का कारण बनता है


23

हमने अपनी नवीनतम नई साइट बिल्ड में नए इनबिल्ट स्वैच फीचर को लागू किया है जब हम स्वैग को श्रेणी के पन्नों पर सक्षम करते हैं तो पेज लोड होने का समय 2 सेकंड से 38 + सेकंड तक हो जाता है।

मैं सोच रहा था कि क्या किसी और के पास यह मुद्दा था और यदि ऐसा है तो क्या हम किसी भी संभावित समाधान का संकेत दे सकते हैं?

हमने मानक आरडब्ल्यूडी थीम पर लागू किए गए स्वैच के साथ 36 कॉन्फ़िगर करने योग्य उत्पादों के साथ ईई 1.14.1 और सीई 1.9.1 की कोशिश की है और कोई अन्य मॉड्यूल सक्रिय नहीं है।

जब भी कोई उपयोगकर्ता किसी श्रेणी को खोजता या फ़िल्टर करता है, तो पृष्ठ को फिर से रोकने के लिए कैशिंग द्वारा इस समस्या को हल नहीं किया जा सकता है।


मैं इसे पुन: पेश नहीं कर सकता। कृपया इंस्टॉल किए गए प्लगइन्स, थीम आदि के प्रकार पर हमें कुछ और दिशा दें। कृपया अपने विषय को अक्षम करके, स्थानीय मॉड्यूल को अक्षम करके और पुनः प्रयास करके Magento डिबगिंग प्रक्रिया का पालन करें।
फिलाइल

हम जिन विशेषताओं का उपयोग कर रहे हैं, वे रंग स्वैच हैं और आकार 8 प्रति आइटम से अधिक नहीं हैं और अधिकांश मामलों में 4 से अधिक नहीं हैं। यह एक रिक्त मैगनेटो सीई 1.9.1 पर चलाया जा रहा है जिसमें नमूना डेटा लोड किया गया है और कस्टम स्वैच के साथ 10 विन्यास योग्य उत्पाद हैं। जोड़ा। यह निश्चित रूप से स्वैच के साथ जुड़ा हुआ है जितना अधिक हम साइट को धीमा करने के लिए जोड़ते हैं। कृपया ध्यान दें कि यह परीक्षण करने के लिए कैशिंग बंद कर दिया गया है क्योंकि उपयोगकर्ता खोज को फ़िल्टर कर सकते हैं और जब भी कोई उपयोगकर्ता अपनी खोज को घुमाता है, तो हमारे पास एक पागल लोड समय नहीं होता है। आपके समय के लिए धन्यवाद :)
डेव बीटिंगटन

जवाबों:


22

सही। मैं Mage_ConfigurableSwatches_Helper_Mediafallback :: AttConfigurableProductChildrenAttributeMapping फ़ंक्शन पर समस्या का पता लगाता हूं।

मैं इस पर कुछ बदलाव करता हूं। इससे प्रदर्शन बढ़ता है।

प्रयत्न:

  1. को कॉपी /app/code/core/Mage/ConfigurableSwatches/Helper/Mediafallback.phpकरें /app/code/local/Mage/ConfigurableSwatches/Helper/Mediafallback.php

  2. /app/code/local/Mage/ConfigurableSwatches/Helper/Mediafallback.phpफ़ाइल पर इस कोड को स्थानांतरित करें (ll.88-91)

     // normalize to all lower case before we start using them
     $optionLabels = array_map(function ($value) {
      return array_map('Mage_ConfigurableSwatches_Helper_Data::normalizeKey', $value);
     }, $optionLabels);

    foreachलूप से पहले तक ।

यह बदली हुई विधि है:

 /**
 * Set child_attribute_label_mapping on products with attribute label -> product mapping
 * Depends on following product data:
 * - product must have children products attached
 *
 * @param array $parentProducts
 * @param $storeId
 * @return void
 */
public function attachConfigurableProductChildrenAttributeMapping(array $parentProducts, $storeId)
{
    $listSwatchAttr = Mage::helper('configurableswatches/productlist')->getSwatchAttribute();

    $parentProductIds = array();
    /* @var $parentProduct Mage_Catalog_Model_Product */
    foreach ($parentProducts as $parentProduct) {
        $parentProductIds[] = $parentProduct->getId();
    }

    $configAttributes = Mage::getResourceModel('configurableswatches/catalog_product_attribute_super_collection')
        ->addParentProductsFilter($parentProductIds)
        ->attachEavAttributes()
        ->setStoreId($storeId)
    ;

    $optionLabels = array();
    foreach ($configAttributes as $attribute) {
        $optionLabels += $attribute->getOptionLabels();
    }

    // normalize to all lower case before we start using them
    $optionLabels = array_map(function ($value) {
        return array_map('Mage_ConfigurableSwatches_Helper_Data::normalizeKey', $value);
    }, $optionLabels);

    foreach ($parentProducts as $parentProduct) {
        $mapping = array();
        $listSwatchValues = array();

        /* @var $attribute Mage_Catalog_Model_Product_Type_Configurable_Attribute */
        foreach ($configAttributes as $attribute) {
            /* @var $childProduct Mage_Catalog_Model_Product */
            if (!is_array($parentProduct->getChildrenProducts())) {
                continue;
            }

            foreach ($parentProduct->getChildrenProducts() as $childProduct) {

                // product has no value for attribute, we can't process it
                if (!$childProduct->hasData($attribute->getAttributeCode())) {
                    continue;
                }
                $optionId = $childProduct->getData($attribute->getAttributeCode());

                // if we don't have a default label, skip it
                if (!isset($optionLabels[$optionId][0])) {
                    continue;
                }

                // using default value as key unless store-specific label is present
                $optionLabel = $optionLabels[$optionId][0];
                if (isset($optionLabels[$optionId][$storeId])) {
                    $optionLabel = $optionLabels[$optionId][$storeId];
                }

                // initialize arrays if not present
                if (!isset($mapping[$optionLabel])) {
                    $mapping[$optionLabel] = array(
                        'product_ids' => array(),
                    );
                }
                $mapping[$optionLabel]['product_ids'][] = $childProduct->getId();
                $mapping[$optionLabel]['label'] = $optionLabel;
                $mapping[$optionLabel]['default_label'] = $optionLabels[$optionId][0];
                $mapping[$optionLabel]['labels'] = $optionLabels[$optionId];

                if ($attribute->getAttributeId() == $listSwatchAttr->getAttributeId()
                    && !in_array($mapping[$optionLabel]['label'], $listSwatchValues)
                ) {
                    $listSwatchValues[$optionId] = $mapping[$optionLabel]['label'];
                }
            } // end looping child products
        } // end looping attributes


        foreach ($mapping as $key => $value) {
            $mapping[$key]['product_ids'] = array_unique($mapping[$key]['product_ids']);
        }

        $parentProduct->setChildAttributeLabelMapping($mapping)
            ->setListSwatchAttrValues($listSwatchValues);
    } // end looping parent products
}

मैं सूची पृष्ठों पर सक्षम किए गए स्वैच के साथ एक ही समस्या आ रही थी और इससे चीजों को गति देने में मदद मिली, इसलिए धन्यवाद!
मार्लोन क्रिएटिव

मुझे वही समस्या मिली। इसे हल करने से पृष्ठ लोड 2.5 मिनट से 7 सेकंड तक हो गया।
एंड्रयू केट

ये नमूने वास्तव में श्रेणियों को धीमा कर देते हैं, खासकर जब आपके पास बहुत सारे कंफ़्यूज़ेबल उत्पाद होते हैं। Андрей М का समाधान। विन्यास योग्य उत्पादों से भरी श्रेणी में 10 से 3 सेकंड तक लोडिंग में कटौती करें! धन्यवाद!
user1895954

+1! इसे साझा करने के लिए धन्यवाद। हम कई विकल्पों में से प्रत्येक के साथ बहुत सारे विन्यास का उपयोग कर रहे हैं और बस अब रंग स्वैच का उपयोग नहीं कर सकते ...
Marc

+1! पूरी तरह से शानदार जवाब, लोडिंग समय 28 सेकंड से 3 सेकंड तक बदल गया! धन्यवाद!!
KI

4

जब आपके पास बहुत सारे विकल्प होते हैं, तो प्रदर्शन विन्यास में सुधार करने का अतिरिक्त तरीका।

उदाहरण के लिए यदि आपके पास 2000 विकल्प हैं और कैटलॉग सूची में 36 उत्पाद दिखाते हैं, तो इस मामले में विधि Mage_ConfigurableSwatches_Model_Resource_Catalog_Product_Attribute_Super_Collection::_loadOptionLabels()प्रत्येक सुपर_टैब्यूज विकल्प लेबल में शामिल हो जाएगी और आपको 2000 * 36 = 72000 पंक्तियाँ मिलेंगी।

मैंने इस विधि को फिर से लिखा है और यह 72000 के बजाय केवल 2000 पंक्तियों को लोड करता है

<?php
/**
 * Load attribute option labels for current store and default (fallback)
 *
 * @return $this
 */
protected function _loadOptionLabels()
{
    if ($this->count()) {
        $labels = $this->_getOptionLabels();
        foreach ($this->getItems() as $item) {
            $item->setOptionLabels($labels);
        }
    }
    return $this;
}

/**
 * Get Option Labels
 *
 * @return array
 */
protected function _getOptionLabels()
{
    $attributeIds = $this->_getAttributeIds();

    $select = $this->getConnection()->select();
    $select->from(array('options' => $this->getTable('eav/attribute_option')))
        ->join(
            array('labels' => $this->getTable('eav/attribute_option_value')),
            'labels.option_id = options.option_id',
            array(
                'label' => 'labels.value',
                'store_id' => 'labels.store_id',
            )
        )
        ->where('options.attribute_id IN (?)', $attributeIds)
        ->where(
            'labels.store_id IN (?)',
            array(Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID, $this->getStoreId())
        );

    $resultSet = $this->getConnection()->query($select);
    $labels = array();
    while ($option = $resultSet->fetch()) {
        $labels[$option['option_id']][$option['store_id']] = $option['label'];
    }
    return $labels;
}

/**
 * Get Attribute IDs
 *
 * @return array
 */
protected function _getAttributeIds()
{
    $attributeIds = array();
    foreach ($this->getItems() as $item) {
        $attributeIds[] = $item->getAttributeId();
    }
    $attributeIds = array_unique($attributeIds);

    return $attributeIds;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.