Ive noticed my home page is taking a long time to load - over 6 seconds infact according site24x7.com, so ive been switching elements off to try and determine what is the cause, and it is down to 2 product collection files I have made to show new products and best selling products.
As soon as i remove these from the home page, the page loads in less than .5 seconds.
So, can anyone help with optimising and caching a productCollection? I have APC installed and running on the server, but Im not sure it is caching the files located in app/design/frontend/default/MY_THEME/catalog/product/newproducts.phtml
So, my collection call for best selling (most viewed actually) looks like this;
<?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)
?>
How can I further optimise this?
Enable/Disable Cache Types In your Magento backend, go to System > Tools > Cache Management. Check the box on which cache type you want to enable/disable. Then on the top left corner, select the appropriate action (Enable/Disable) and click the Submit button.
Create a new cache type To create a new cache type, you will have to create app/code/Optiweb/MegaMenu/etc/cache. xml in your module. Now you can see your new cache type on the Magento Cache Management page. To use this new cache type, you will need a helper file.
Flush Magento Cache is a feature to clear cache from the cache storage. It removes items in the default Commerce cache (var/cache). The items are cleared based on their associated Commerce tags. Adobe recommends enabling flush cache actions only for admins.
Try
$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));
}
See
If you want to cache $collection, there is already a built-in possibility for collection caching in Magento.
$_productCollection= Mage::getResourceModel('reports/product_collection');
$cache = Mage::app()->getCache(); //Let's get cache instance
$cache->setLifetime(86400); //Here we set collection cache lifetime
$_productCollection->initCache(
$cache,
'Bestsellers_', //this is just custom prefix
array('collections')
);
}
Credit for above code: apiworks.net (http://www.apiworks.net/2015/01/magento-collection-caching.html)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With