Magento:花35秒钟加载4个产品

时间:2014-11-21 15:28:17

标签: magento caching nginx

我创建了一个基于属性过滤产品集合的扩展程序。 下面是控制器,块和视图模板代码。

控制器

    $url = Mage::getUrl('no-route');
    if(Mage::app()->getRequest()->getParam('ajax')){
       echo $this->getLayout()->createBlock('catalogextensions/bestsellers_home_list')          
            ->setTemplate('catalog/landings/bestseller.phtml')
            ->toHtml();
    }
    else{
    $this->loadLayout();
    $this->getLayout()->getBlock('head')->setTitle('Besesellers');
    $this->renderLayout();
    }

阻止产品收集功能

    $storeId = Mage::app()->getStore()->getId();
    $products = Mage::getResourceModel('catalog/product_collection')
            ->addAttributeToSelect('*') 
            ->addAttributeToFilter(array( array( 'attribute'=>'top_seller', 'eq' => '1' )));
    Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);
    Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($products);
    $products->getSelect()->limit(4,$this->get_cur_page());
    return $products ;

在view.phtml模板上迭代产品集合。

现在,获取输出需要35秒,下面是我通过使用PHP的microtime()函数获得的执行统计数据

对于

  1. 阻止(产品收集)约 0.01秒
  2. 模板渲染 0.12秒
  3. 但对于控制器功能,它需要 35秒

    我无法找到要检查的内容,因为控制器功能只是在运行时创建一个Block。

    *注意:我正在使用付费整页缓存扩展程序“Mirasvit FPC”。

    我怎样才能找到花时间

    服务器配置

    • 30GB Ram,4 vCPU。
    • 应用程序服务器:Nginx + php5-fpm。
    • 版本:Magento CE 1.8.0.1

    感谢。

3 个答案:

答案 0 :(得分:0)

您使用一种不赞成使用的方式来调用过滤器。我不知道这是否真的会影响加载时间,但使用addFieldToFilter()会限制对数据库的调用并且可能很有用。您可以使用:

Magento: Filter products by Status

filtering product collection on "is_salable"

块可能未正确缓存。我的意思是每次调用页面时都会加载产品。

答案 1 :(得分:0)

确保您的平板产品设置为开启,并且过滤器所需的所有属性都设置为过滤器。

如果列表来自EAv表,它可能会消耗大量资源,从而减慢速度。

另外应用优化技巧。

答案 2 :(得分:0)

首先,您确定需要添加所有要选择的属性吗? 您可以替换

addAttributeToSelect('*')

addAttributeToSelect(array('attribute_code', 'attribute_code'))

接下来,究竟是什么

$this->get_cur_page()

在做什么?其余代码不应该造成灾难性的性能问题。

PS 这应该是一个评论,但我还没有发表评论。