Recently I had performance issues when importing several ten tausend products. The problem was, that I always used the “normal” product entity model to load attribute values. The following snippet shows, how to load product attributes directly instead. Therefore I use the product resource singleton.
<?php $iProductId = $aChange['pid']; $oItem = new Varien_Object; /** * The old way: Baaaaaad and slow!!! **/ $oProduct = Mage::getModel('catalog/product')->load($iProductId); // loads all attributes and initializes model completely # simple text attributes $oItem->setName($oProduct->getName()); $oItem->getSku($oProduct->getSku()); $oItem->setSheldonArticlenbr($oProduct->getSheldonArticlenbr()); $oItem->setSheldonColor($oProduct->getSheldonColor()); # option value attributes (select boxes) $oItem->setSheldonSize($oProduct->getAttributeText('sheldon_size')); /** * The old way END **/ /** * The new way!!! Gooooood! Fast! Queries database directly and selects only necessary attributes **/ /* @var Mage_Catalog_Model_Resource_Product $rProduct */ $rProduct = Mage::getResourceSingleton('catalog/product'); # simple text attributes $oItem->setName($rProduct->getAttributeRawValue($iProductId, 'name', Mage::app()->getStore())); $oItem->getSku($rProduct->getAttributeRawValue($iProductId, 'sku', Mage::app()->getStore())); $oItem->setSheldonArticlenbr($rProduct->getAttributeRawValue($iProductId, 'sheldon_articlenbr', Mage::app()->getStore())); $oItem->setSheldonColor($rProduct->getAttributeRawValue($iProductId, 'sheldon_color', Mage::app()->getStore())); # option value attributes (select boxes) $iRawSize = $rProduct->getAttributeRawValue($iProductId, 'sns_size', Mage::app()->getStore()); $oItem->setSheldonSize($rProduct->getAttribute('sheldon_size')->getSource()->getOptionText($iRawSize));