我注意到我的主页需要花费很长时间才能加载 - 超过6秒insite24x7.com,所以我一直在关闭元素以尝试确定原因是什么,它归结为2个产品集合文件我已经做了展示新产品和最畅销的产品。
只要我从主页上删除这些内容,页面就会在不到0.5秒的时间内加载。
那么,任何人都可以帮助优化和缓存productCollection吗?我在服务器上安装并运行了APC,但我不确定它是否缓存位于app / design / frontend / default / MY_THEME / catalog / product / newproducts.phtml中的文件
所以,我最畅销的收藏品(实际上看得最多)看起来像这样;
<?php $storeId = Mage::app()->getStore()->getId(); // return current store id ?>
<?php $_productCollection= Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('*')
->addStoreFilter($storeId)
->addViewsCount()
->addFieldToFilter('visibility', Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)
->addFieldToFilter('status',Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
$_productCollection->getSelect()->limit(8)
?>
如何进一步优化此功能?
答案 0 :(得分:7)
尝试
$storeId = Mage::app()->getStore()->getId();
$cache = Mage::getSingleton('core/cache');
$key = 'homepage-most-view-' . $storeId;
if(! $data = $cache->load($key)){
$_productCollection= Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('*')
->addStoreFilter($storeId)
->addViewsCount()
->addFieldToFilter('visibility', Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)
->addFieldToFilter('status',Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
$_productCollection->getSelect()->limit(8)
// get the element you need from $_productCollection and store in $array
$data = serialize($array);
$cache->save(urlencode($data), $key, array("homepage_cache"), 60*60*24);
}
else{
$data = unserialize(urldecode($data));
}
见
答案 1 :(得分:1)
如果要缓存$ collection,Magento中已经存在内置的收集缓存可能性。
gather_nd
以上代码的信用:apiworks.net(http://www.apiworks.net/2015/01/magento-collection-caching.html)