Magento2: настраиваемый продукт: получение атрибутов образца в list.phtml занимает слишком много времени

Предварительные условия Magento CE 2.2.0 PHP 7.0.23-1

База данных перенесена с 1.9.2 на 2.2.0

Проверял с разными экземплярами и разными версиями. Настроена максимально возможная конфигурация сервера.

-У нас есть одна категория «классические кольца», всего 12 настраиваемых продуктов. Каждый настраиваемый продукт содержит не менее 1100 простых товаров, некоторые из них имеют более 1500 простых товаров и в общей сложности более 13 тысяч товаров (в том числе с настраиваемыми и простыми вариациями) в одной категории «классические кольца».

один настраиваемый продукт имеет 5 атрибутов «цвет, материал, отделка, толщина, ширина», и мы отображаем атрибуты каждого продукта на странице со списком, включая все его параметры образца (например, цвет: красный, зеленый, желтый ..., материал: 10k, 14к, 18к.., ширина: 2мм, 4мм до 12мм.. и т.д.)

Этапы воспроизведения

Когда мы нажимаем на категорию classicrings (т.е. страницу списка во внешнем интерфейсе), чтобы отобразить все 12 настраиваемых продуктов во внешнем интерфейсе, сервер отключается по тайм-ауту или загружает страницу несколько раз через 10–15 минут.

-Итак, мы отладили код list.phtml и прокомментировали приведенный ниже код, из которого все атрибуты образца и его параметры поступают на страницу листинга:

//echo $block->getProductDetailsHtml($_product);

After commenting above line of code, listing page start loading quickly within 2 sec. But this is not the solution. As client want to display the all attributes with its options, which is taking too much time to load and going server time out most of the time.

Ожидаемый результат

Категория Страница со списком товаров должна загружаться со всеми атрибутами и параметрами в течение не менее 2–5 секунд (включая отображение всех атрибутов и параметров).

Фактический результат

Время ожидания запроса

Этот запрос слишком долго обрабатывается, время истекло сервером. Если это не должно быть тайм-аут. Когда-то система дала сбой.

Для небольших вариантов продукта он загружается хорошо, но также занимает более 40 секунд.


person mritunjay kumar    schedule 04.07.2018    source источник


Ответы (1)


Чтобы повысить эффективность страницы со списком:

Я попытался реализовать отдельный вызов ajax для этой страницы, загружая параметры образца каждого продукта один за другим через вызов ajax, после чего я могу увеличить скорость страницы, но все же страница загружается гораздо дольше, и пользовательский интерфейс не очень хорош.

Кроме того, я попытался получить и отобразить данные образца другим методом, используя концепцию фильтрации только одного атрибута образца (в моем случае атрибута «Ширина»). Для того же я переопределил функцию «SwatchAttributesAsArray» класса «Magento\Swatches\Helper\Data» с помощью плагина. Но все же загрузка страницы занимает от 5 до 8 минут.

Код реализован следующим образом: //di.xml -- type name="Magento\Swatches\Helper\Data" //plugin name="RestrictProductsOptions" type="Synapsemage\Import\Plugin\SwatchData"

public function afterGetSwatchAttributesAsArray($subject, $attributesData)
{
    // die('mritu');
    $actions = ['catalog_category_view','catalogsearch_result_index','catalogsearch_advanced_result','import_index_listswatch'];
    if (in_array($this->getFullAction(), $actions))
    {   
        $objectManager = ObjectManager::getInstance();
        //get current category
        $categoryId = $parentId = 0;
        $category = $objectManager->get('Magento\Framework\Registry')->registry('current_category');
        if($category!=null){
            $categoryId = $category->getId();
            $parentId = $category->getParentCategory()->getId();
        }
        if($categoryId==34){
            $newAttributesData = array();
            $newAttributesData[182] = $attributesData[182];
            // print_r($newAttributesData);die;
            return $newAttributesData;
        }

        foreach($attributesData as $attr)
        {
            $attrcode = $attr['attribute_code'];
            if(!empty($attrcode))
            {
                if($categoryId==44){
                    if($attrcode=='stone'){
                      unset($attributesData[$attr['attribute_id']]);
                    }
                }elseif($categoryId==31 || $parentId==31 || $categoryId==28){
                    if($attrcode=='material'){
                      unset($attributesData[$attr['attribute_id']]);
                    }
                    if($categoryId==31 || $parentId==31){
                        if($attrcode=='color'){
                          unset($attributesData[$attr['attribute_id']]);
                        }
                    }
                    if($categoryId==33 ){
                        if($attrcode=='stone'){
                          unset($attributesData[$attr['attribute_id']]);
                        }
                    }
                }elseif($categoryId==21 || $parentId==21){

                    if($attrcode=='stone'){
                      unset($attributesData[$attr['attribute_id']]);
                    }
                }               
            }           
        }
    }
    return $attributesData;
}

}

person mritunjay kumar    schedule 18.07.2018