Всем здравствуйте.
Есть 2 варианта одного и того же - заполнение свойства по дескрипшину картинки.
1 вариант - работает очень долго(20-28 секунд), но потребяет памяти 94980808
2 вариант(2-4 секунды), но памяти потребляет 1651298448(что в 15-17 раз больше предыдущего варианта)
Получается хочешь уложиться во время выполнения скрипта 2 вариант лучше, но упираешься в нехватку памяти
пытаешься уложиться в память упираешься в предел времени выполнения
как быть? и тот вариант плох и другой
Есть 2 варианта одного и того же - заполнение свойства по дескрипшину картинки.
1 вариант - работает очень долго(20-28 секунд), но потребяет памяти 94980808
Код |
---|
$products = \CIBlockElement::GetList( [], [ 'IBLOCK_ID' => 26, 'ACTIVE' => 'Y', ], false, false, [ 'ID', 'IBLOCK_ID', 'DETAIL_PICTURE', ] ); while (($product = $products->GetNextElement()) !== false) { $productFields = $product->GetFields(); $productProps = $product->GetProperties(); $arFile = \CFile::GetFileArray($productFields["DETAIL_PICTURE"]); if ($arFile['DESCRIPTION'] == 'color') { if ($productProps['COLOR_IMG']['VALUE'] != $productFields["DETAIL_PICTURE"]) { \CIBlockElement::SetPropertyValuesEx( $productFields['ID'], $productFields['IBLOCK_ID'], [ 'COLOR_IMG' => $productFields["DETAIL_PICTURE"], ] ); } }else{ foreach ($productProps['MORE_PHOTO']['VALUE'] as $key => $value) { if ($productProps['MORE_PHOTO']['DESCRIPTION'][$key] == 'color') { if ($productProps['COLOR_IMG']['VALUE'] != $value) { \CIBlockElement::SetPropertyValuesEx( $productFields['ID'], $productFields['IBLOCK_ID'], [ 'COLOR_IMG' => $value, ] ); } } } } } |
2 вариант(2-4 секунды), но памяти потребляет 1651298448(что в 15-17 раз больше предыдущего варианта)
Код |
---|
$products = \CIBlockElement::GetList( [], [ 'IBLOCK_ID' => 26, 'ACTIVE' => 'Y', ], false, false, [ 'ID', 'IBLOCK_ID', 'DETAIL_PICTURE', ] ); $rprArr=[]; while ($fields = $products->Fetch()) { $items[$fields['ID']] = [ 'ID' => $fields['ID'], 'IBLOCK_ID' => $fields['IBLOCK_ID'], 'DETAIL_PICTURE' => \CFile::GetFileArray($fields["DETAIL_PICTURE"]) ]; $rprArr[$fields['ID']] = $fields['ID']; } \CIBlockElement::GetPropertyValuesArray($rprArr, 26, array( 'ID' => $rprArr, 'IBLOCK_ID' => 26, )); foreach($rprArr as $kl=>$vl){ if ($items[$kl]['DETAIL_PICTURE']['DESCRIPTION'] == 'color') { if ($vl['COLOR_IMG']['VALUE'] != $items[$kl]['DETAIL_PICTURE']["ID"]) { \CIBlockElement::SetPropertyValuesEx( $kl, $items[$kl]['IBLOCK_ID'], [ 'COLOR_IMG' => $items[$kl]['DETAIL_PICTURE']["ID"], ] ); } }else{ foreach ($vl['MORE_PHOTO']['VALUE'] as $key => $value) { if ($vl['MORE_PHOTO']['DESCRIPTION'][$key] == 'color') { if ($vl['COLOR_IMG']['VALUE'] != $value) { \CIBlockElement::SetPropertyValuesEx( $kl, $items[$kl]['IBLOCK_ID'], [ 'COLOR_IMG' => $value, ] ); } } } } } |
Получается хочешь уложиться во время выполнения скрипта 2 вариант лучше, но упираешься в нехватку памяти
пытаешься уложиться в память упираешься в предел времени выполнения
как быть? и тот вариант плох и другой