Magento - 具有1000种颜色选项的可配置产品减慢了产品详细信息页面加载时间

时间:2012-06-18 14:00:10

标签: php mysql magento

我们有一个magento商店,大约有5k个可配置产品。对于那些产品,我们有29k +选项的“颜色”属性。 这严重减慢了我们的商店(加载产品详细信息页面10-20秒)。

许多开发人员告诉我们,他们可以使用直接查询来解决速度问题。但是,其中没有一个实际上能够完成这项任务。

有没有人在这里成功完成这个?任何建议,代码等..将不胜感激。我花了很多时间在这里四处看看,并没有看到任何具体的问题答案。

2 个答案:

答案 0 :(得分:0)

使用redis,nginx和php-fpm在Amazon EC2上托管研究。数据库是一个单独的EC2实例,未在主机ubuntu安装上设置。我们现在正在这样做推出我们的1.7.0.0安装。通过缓存和无优化,我们可以像专门从事Magento托管的优化虚拟主机公司一样快。

答案 1 :(得分:0)

由于我今天有类似或可能完全相同的问题,我想发布解决方案:

在我的情况下,我有可配置属性,可能有20k选项。 产品详细信息页面永远加载。

经过一些研究后我发现其他人也有类似的问题: Link 1 Link 2

解决方案如下:

我复制了: /app/code/core/Mage/ConfigurableSwatches/Model/Resource/Catalog/Product/Attribute/Super/Collection.php

到当地: /应用程序/代码/ 本地 /Mage/ConfigurableSwatches/Model/Resource/Catalog/Product/Attribute/Super/Collection.php

(请注意,您应该更改: $ fallbackStoreId 变量)

并做出以下改动以加速事情:

/**
 * 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();
    // Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID
    $fallbackStoreId = 2;

    $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($fallbackStoreId, $this->getStoreId())
        );


    $labels = array();
    $thisClass = $this;
    Mage::getSingleton('core/resource_iterator')->walk(
        $select,
        array(function($args) use (&$thisClass){
            $data = $args['row'];
            $labels[$data['option_id']][$data['store_id']] = $data['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;
}