@redesupar

Как правильно оптимизировать запрос 1с-битрикс?

есть одна страница, на которой выводятся все товары их меньше 3т
Откладка показывает:
Время генерации: 1.3675 сек.
Всего запросов: 3656, время: 0.2283 сек. (16.69%)
на сама страница очень долго грузится, как можно оптимизировать подскажите пожалуйста
весь код шаблон catalog.section тут
а result-modifier тут

но думаю что проблема в этом

<?

                foreach ($itemSection["DATA"] as $arItem) {

                    $this->AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arParams["IBLOCK_ID"], "ELEMENT_EDIT"));
                    $this->AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arParams["IBLOCK_ID"], "ELEMENT_DELETE"), array("CONFIRM" => GetMessage('CT_BCS_ELEMENT_DELETE_CONFIRM')));

                    if (!empty($arItem['PRODUCT_PROPERTIES_FILL'])) {
                        foreach ($arItem['PRODUCT_PROPERTIES_FILL'] as $propID => $propInfo) {
                            if (isset($arItem['PRODUCT_PROPERTIES'][$propID]))
                                unset($arItem['PRODUCT_PROPERTIES'][$propID]);
                        }
                    }

                    $emptyProductProperties = empty($arItem['PRODUCT_PROPERTIES']);
                    $arItem["EMPTY_PROPS_JS"] = (!$emptyProductProperties ? "N" : "Y");

                    $item_id = $arItem["ID"];
                    $totalCount = $arItem['TOTAL_COUNT'];
                    $arQuantityData = CMax::GetQuantityArray($totalCount, array('ID' => $item_id), 'N', (($arItem["OFFERS"] || $arItem['CATALOG_TYPE'] == CCatalogProduct::TYPE_SET || $bSlide || !$arResult['STORES_COUNT']) ? false : true));

                    $strMeasure = '';
                    if (!$arItem["OFFERS"] || $arParams['TYPE_SKU'] === 'TYPE_2') {
                        if ($arParams["SHOW_MEASURE"] == "Y" && $arItem["CATALOG_MEASURE"]) {
                            $arMeasure = CCatalogMeasure::getList(array(), array("ID" => $arItem["CATALOG_MEASURE"]), false, false, array())->GetNext();
                            $strMeasure = $arMeasure["SYMBOL_RUS"];
                        }
                        $arItem["OFFERS_MORE"] = "Y";
                    } elseif ($arItem["OFFERS"]) {
                        $strMeasure = $arItem["MIN_PRICE"]["CATALOG_MEASURE_NAME"];
                        $arItem["OFFERS_MORE"] = "Y";
                    }
                    $elementName = ((isset($arItem['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE']) && $arItem['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE']) ? htmlspecialchars_decode($arItem['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE']) : $arItem['NAME']);
                    ?>
                    <? $arAddToBasketData = $arItem['ADD_TO_BASKET_DATA']; ?>
                    <?
                    $num_row++;
                    ?>
  • Вопрос задан
  • 45 просмотров
Пригласить эксперта
Ответы на вопрос 1
no_one_safe
@no_one_safe
У вас запросы в цикле вот тут
$arMeasure = CCatalogMeasure::getList(array(), array("ID" => $arItem["CATALOG_MEASURE"]), false, false, array())->GetNext();

И наверняка вот тут
$arQuantityData = CMax::GetQuantityArray($totalCount, array('ID' => $item_id), 'N', (($arItem["OFFERS"] || $arItem['CATALOG_TYPE'] == CCatalogProduct::TYPE_SET || $bSlide || !$arResult['STORES_COUNT']) ? false : true));

Не проще СНАЧАЛА собрать все $arItem["CATALOG_MEASURE"] в массив и сделать один запрос и потом уже использовать эти данные?
Тот же прием и со вторым запросом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы