О лишних запросах

Совершенство достигается не тогда, когда уже нечего прибавить, но когда уже ничего нельзя отнять
Антуан де Сент-Экзюпери

Оптимизация процесса интеграции 1С Предприятия и 1С Битрикс – это неисчерпаемая тема.  Чего только не увидишь порой в обработчиках событий добавления и обновления элемента инфоблока.
Больше всего меня убивает, когда я вижу, что разработчики тянут из базы то, что у них и так уже есть. Пример из жизни (нет, серьезно – это реальный пример):

AddEventHandler(“iblock”, “OnAfterIBlockElementAdd”, “BXMUpdateElement_FIELDS”);
function BXMUpdateElement_FIELDS(&$arFields)
{

$ibe = new CIBlockElement();

$dbr = $ibe->GetList(array(), array(‘ID’=>$arFields[‘ID’]) );
while($oe = $dbr->GetNextElement())
{
$arP = $oe->GetProperty(‘CML2_TRAITS’);

}

}

А то, что нужно – уже передано в обработчик в $arFields[‘PROPERTY_VALUES’][92]
Зачем так неэкономно разбрасываться запросами к базе? Одна строка – и 20 000 лишних обращений к базе при импорте 20 000 элементов.

Об авторе:

Инженер-программист по образованию, web-программист по призванию, Битрикс-программист по любви и 1с-программист по стечению обстоятельств, руководитель команды web-разработчиков, внедренец 1С-Битрикс и Битрикс24, основатель одноименной студии.

bedrosova3

Подпишитесь на рассылку!

Fields marked with an * are required

Комментарии

  1. Ответить

    Julliet, боюсь в данном случае я права, а вы – заблуждаетесь. 🙂 Если завтра случится война, пожар, кто-нибудь грохнет весь инфоблок,или просто это свойство – и создаст заново, какой тогда будет ID? – тогда и вызов события не произойдет. А если вызов произошел – то нужные нам данные уже переданы в $arFields. Конечно, вы можете ради интереса предварительно проверять их наличие.

  2. Ответить

    Вы правы насчет ненужности этих запросов в обработчике, НО не правы в том, что надо в лоб обращаться к значению свойства по ID.

    Оно(значение) уже в PROPERTY с ID =92? А завтра случится война, пожар, кто-нибудь грохнет весь инфоблок,или просто это свойство – и создаст заново, какой тогда будет ID? Обработчик "сломается"… Впрочем, как и в случае, если изменится символьный код свойства.

    Должен быть какой-то более простой путь решения.

 

Комментировать

 

Подписаться на рассылку:

Fields marked with an * are required