এন্টারপ্রাইজ 1.14.1 বিভাগগুলি পৃষ্ঠাগুলিতে 35 সেকেন্ডের বেশি লোড সময় ঘটাচ্ছে এমন স্য্যাচগুলি


23

আমরা আমাদের সর্বশেষ নতুন সাইট বিল্ডে নতুন ইনবিল্ট স্য্যাচস বৈশিষ্ট্যটি প্রয়োগ করেছি যখন আমরা বিভাগের পৃষ্ঠাগুলিতে স্যুইচগুলি সক্ষম করি পৃষ্ঠাটির লোড সময়টি 2 সেকেন্ড থেকে 38 + সেকেন্ডে চলে যায়।

আমি ভাবছিলাম যে অন্য কারও কাছেই এই সমস্যা ছিল এবং যদি তাই হয় তবে আমাদের কোনও সম্ভাব্য সমাধানের ইঙ্গিত দিতে পারে?

আমরা স্ট্যান্ডার্ড আরডাব্লুড থিমের সাথে প্রয়োগ করা স্য্যাচগুলি সহ 36 কনফিগারযোগ্য পণ্যগুলির সাথে EE 1.14.1 এবং সিই 1.9.1 চেষ্টা করেছি এবং অন্য কোনও মডিউল সক্রিয় নেই।

এই সমস্যাটি ক্যাশিংয়ের মাধ্যমে সমাধান করা যায় না যতবার ব্যবহারকারী যখনই পৃষ্ঠা অনুসন্ধানের জন্য বা কোনও ফিল্টার ফিল্টার করে আবার থামার জন্য ফিল্টার করে।


আমি এটি পুনরুত্পাদন করতে পারি না। প্লাগইন ইনস্টল করা, থিম ইত্যাদির ধরণ সম্পর্কে আরও কিছু দিকনির্দেশ দিন দয়া করে আপনার থিমটি অক্ষম করে, স্থানীয় মডিউলগুলি অক্ষম করে এবং আবার চেষ্টা করে ম্যাজেন্টো ডিবাগিং প্রক্রিয়াটি অনুসরণ করুন।
ফিলিঙ্কল

আমরা যে বৈশিষ্ট্যগুলি ব্যবহার করছি তা হ'ল রঙ স্বাচ এবং আকারগুলি প্রতিটি আইটেম 8 এর চেয়ে বেশি নয় এবং বেশিরভাগ ক্ষেত্রে 4-র বেশি নয় This এখনো যোগ করেনি। এটি স্পাচের সাথে স্পষ্টভাবে সম্পর্কিত কারণ আমরা যত বেশি ধীরে ধীরে ধীরে ধীরে জুড়ব। অনুগ্রহ করে নোট করুন যে পরীক্ষাগুলি ব্যবহারকারীরা অনুসন্ধান ফিল্টার করতে পারে তাই এটি পরীক্ষার জন্য ক্যাচিং বন্ধ করা আছে এবং প্রতিবার ব্যবহারকারী যখন অনুসন্ধান অনুসন্ধান করেন তখন আমরা ক্রেজি লোড টাইম করতে পারি না। আপনার সময়ের জন্য ধন্যবাদ :)
ডেভ বেভিংটন

উত্তর:


22

ঠিক। আমি Mage_ConfigurableSwatchHelper_Mediafallback :: সংযুক্তি কনফিগারযোগ্য প্রডাক্টচিল্ডেনঅ্যাট্রিবিউটম্যাপিং ফাংশনটিতে সমস্যা সনাক্ত করি।

আমি এটিতে কিছু পরিবর্তন করছি। এই কর্মক্ষমতা বৃদ্ধি।

চেষ্টা করুন:

  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 সেকেন্ডের মধ্যে লোডটি কেটে দিন! ধন্যবাদ!
ব্যবহারকারী 1895954

+1 টি! এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ। আমরা একে বিভিন্ন বিকল্প সহ কনফিগার অনেকটা ব্যবহার করছেন এবং মাত্র আর রঙের নমুনাগুলি ব্যবহার করতে পারে ...
মার্ক

+1 টি! একেবারে উজ্জ্বল উত্তর, লোডিংয়ের সময়টি 28 সেকেন্ড থেকে 3 সেকেন্ডে পরিবর্তিত হয়েছে! ধন্যবাদ!!
কেআই

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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.