Задача: реализовать загрузку на сайт в каталог данных из csv файла + прикрепление картинок в публичной части, то есть для клиентов, которым не дан доступ в админку.
На данный момент сама по себе задача решена:
1) Файлы csv + картинки загружаются в 1 zip архиве
2) Архив распаковывается
3) Сначала обрабатываются построчно данные из csv файлов
4) Наконец подгружаются кратинки к элементам
То есть все работает.
Проблема: в том, что при всем при этом уж больно много запросов возникает даже для небольших файлов с данными.
Собственно вопрос: кто какие способы оптимизации предложит?
На данный момент используется:
1) Для добавления нового элемента ($Element содержит сразу и PROPERTY_VALUES):
2) Для обновления элемента:
Сначала для обновления свойств
этот код вызванный для 9 элементов (по 4-5 свойств у каждого) генерирует ~136 запросов.
Затем для обновления самого элемента (и поискового индекса)
этот код вызванный для 9 элементов ($Element содержит только NAME, ACTIVE, DATE_ACTIVE_TO) генерирует ~535 запросов (! вообще ужас). На сколько я понял, в основном запросы тратятся на обновление поискового индекса... Так как, если его не обновлять (bUpdateSearch=true), количество запросов падает сразу да нескольких штук. Но ведь обновить его нужно, если элемент изменен.
3) Для подгрузки картинок (отдельно для каждого элемента):
этот код вызванный 5 раз (5 элементов) для загрузки 9 картинок (по 2-3 картинки у некоторых) генерирует ~99 запросов.
Итого около 800 запросов для обновления каких-то 9 элементов! А что будет, если подгрузить понадобится 200, 500 позиций?
Важно: используются , т.е. хранение в отдельных таблицах.
На данный момент сама по себе задача решена:
1) Файлы csv + картинки загружаются в 1 zip архиве
2) Архив распаковывается
3) Сначала обрабатываются построчно данные из csv файлов
4) Наконец подгружаются кратинки к элементам
То есть все работает.
Проблема: в том, что при всем при этом уж больно много запросов возникает даже для небольших файлов с данными.
Собственно вопрос: кто какие способы оптимизации предложит?
На данный момент используется:
1) Для добавления нового элемента ($Element содержит сразу и PROPERTY_VALUES):
| Код |
|---|
$el = new CIBlockElement; $ID = $el->Add($Element); |
Сначала для обновления свойств
| Код |
|---|
foreach($ElementProps as $PropCode=>$Value){
CIBlockElement::SetPropertyValues($ElementID, $IBlock["ID"], $Value, $PropCode);
} |
Затем для обновления самого элемента (и поискового индекса)
| Код |
|---|
$el = new CIBlockElement; $el->Update($ElementID, $Element); |
3) Для подгрузки картинок (отдельно для каждого элемента):
| Код |
|---|
CIBlockElement::SetPropertyValues($ElementID, $IBlock["ID"], $arPicts, "IMAGE_MAIN"); |
Итого около 800 запросов для обновления каких-то 9 элементов! А что будет, если подгрузить понадобится 200, 500 позиций?
Важно: используются , т.е. хранение в отдельных таблицах.

