Magento2:可配置产品:在list.phtml中获取样本属性需要太多时间

时间:2018-07-04 12:16:06

标签: attributes magento2 options configurable-product magento2.2

前提条件 Magento CE 2.2.0 PHP 7.0.23-1

数据库从1.9.2迁移到2.2.0

已检查不同实例和各种版本。 已配置的最高服务器配置。

-我们有一个“分类”类别,只有12种可配置产品。每个可配置产品均包含至少1100个简单产品,其中一些产品包含1500多个简单产品,并且在一个“分类”类别下总共包含13000多种产品(包括可配置和简单变体)。

一个可配置的产品具有5个属性'颜色,材料,饰面,厚度,宽度',我们在列表页上显示每个产品属性,包括其所有色板选项(例如颜色:红色,绿色,黄色..,材料:10k,14k,18k ..,宽度:2mm,4mm至12mm ..等)

复制步骤

当我们单击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 :(得分:0)

要改善列表页面的性能:

我试图通过ajax调用一个接一个地加载每个产品的swatch选项来为此页面实现单独的ajax调用,这样我可以提高页面速度,但是页面仍在加载更多的加载时间,而用户体验却没有好。

此外,我尝试使用另一种方法来获取和显示样例数据,使用仅过滤一个样例属性(在我的情况下为“ Width”属性)的概念。同样,我通过使用插件覆盖了“ Magento \ Swatches \ Helper \ Data”类的“ SwatchAttributesAsArray”函数。但是仍然需要5到8分钟才能加载页面。

已通过以下方式实现了代码: //di.xml-输入名称=“ 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;
}

}