Здравствуйте! Использую данную функцию для получения минимального и максимального значения свойств. В плане отдачи данных всё работает превосходно, но скорость обработки очень хромает.
public function addMinMaxProperty()
{
$iCurrentShopGroup = intval($this->group);
$linkedObject = Core_Entity::factory('Shop_Item_Property_List', 3);
$aProperties = $linkedObject->getPropertiesForGroup($iCurrentShopGroup);
$oShop = $this->getEntity();
foreach($aProperties as $current_property)
{
$aPropertyValues = '';
$oProperty = Core_Entity::factory('Property', $current_property->id);
$oShop_Items = $oShop->Shop_Items;
$this->_applyItemConditionsQueryBuilder($oShop_Items->queryBuilder());
$aShop_Items = $oShop_Items->getAllByShop_Group_Id($iCurrentShopGroup);
foreach($aShop_Items as $oShop_Item)
{
$oPropertyValue = $oProperty->getValues($oShop_Item->id, FALSE);
if(isset($oPropertyValue[0]) and isset($oPropertyValue[0]->value))
{
$aPropertyValues[] = $oPropertyValue[0]->value;
}
}
if(is_array($aPropertyValues))
{
$minPropertyValue = min($aPropertyValues);
$maxPropertyValue = max($aPropertyValues);
$this->addEntity(
Core::factory('Core_Xml_Entity')
->name('minPropertyValue')
->value($minPropertyValue)
->addAttribute('id', $current_property->id)
)
->addEntity(
Core::factory('Core_Xml_Entity')
->name('maxPropertyValue')
->value($maxPropertyValue)
->addAttribute('id', $current_property->id)
);
}
}
return $this;
}
Что можно сделать для ускорения обработки такого запроса? Иногда сервер уже жалуется на недостаток памяти.
Пока на ум пришло только вручную задать список свойств, которые нужны для MIN/MAX, нужны только с отображением От и до. Есть ли какие-то способы диагностики? В каком именно месте проблема: в переборе свойств, в получение товаров, в вычислениях, цикл в цикле?