Magento2: Конфигурируемый продукт: получение атрибутов образцов в list.phtml занимает слишком много времени - PullRequest
0 голосов
/ 04 июля 2018

Предпосылки Magento CE 2.2.0 PHP 7.0.23-1

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

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

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

один настраиваемый продукт имеет 5 атрибутов «цвет, материал, отделка, толщина, ширина», и мы отображаем атрибуты каждого продукта на странице списка, в том числе со всеми вариантами образцов (такими как цвет: красный, зеленый, желтый .., материал : 10K, 14K, 18K .., ширина: 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 секунд.

1 Ответ

0 голосов
/ 18 июля 2018

Для повышения производительности страницы листинга:

Я попытался реализовать отдельный вызов 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;
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...