Производительность в админке при фильтрации категорий

Мы запускаем проект мульти витринный в котором подразумевается до 10 витрин, начали проводить нагрузочные тесты и сели в лужу не начав тестировать.


Суть в том что при загрузке списка товаров вызывается фильтр по категориям и тут все как говориться пропало. В магазине на момент теста было более 21865 категорий и 113146 товаров.

Админка вендора - список из четырех товаров грузится у вендора почти две секунды.


Проверка на заполненность не влияет, так как происходит после всех запросов и отрисовки админки “Товар не будет опубликован на витрине - Не заполнены характеристики - Добавьте в категорию маркетплейса”


А теперь самое сладкое, это админка АДМИНИСТРАТОРА и неважно сколько в пагинации стоит товаров, 50 или 250 суть единая запрос для каждого товара делает проверку на принадлежность к категории.

Если мы даже отключим все модули, то в скорости мы не сильно выиграем, так как тут остался только модуль изменения карточки товара, но по факту его запрос тут роли не играет.

Отключаем запрос с категориями и процесс упирается в скорость 0,14 секунды на список в 250 товаров и наличием в магазине 21000 категорий, 113146 товаров, а если мы сюда добавим что и БД mysl 8.0 то скорости она дает в разы больше, так как сама многие запросы оптимизирует, но не в этот раз.

Решение тут видится в том, чтобы добавить фильтр по категориям маркетплейса и вендора, а так же витринам. Тогда прирост будет существенный, так как этот же запрос работает на витрине с пагинацией в 128 товаров за 1,3 секунды. есть еще вариант перевести таблицу на InnoDB но тогда немного потеряем на скорости записи, но для поиска будет сильно ощутим прирост.


Если убрать чать запросов с витрины по картинками для меню, банерам и доп украшениям, то полетит как пуля.

Параметры mysl 8.0, php 8, если необходимо можем дать клона на поломать на случай если сами не сможете повторить

1 лайк

Обсудили с разработчиками.

Вы правы, что категории сильно замедляют запрос. И мы всегда рассматриваем варианты, как подобные вещи улучшить. К сожалению, простых и безболезненных решений тут нет. Например, если “в лоб” исключить категории из запроса, то:

  1. Ухудшатся результаты поиска. Там могут появиться товары, которые никак не должны были отображаться. Например, товары без категорий.

  2. Любые модули, которые сейчас расширяют запрос выборки товаров и полагаются на наличие таблицы категорий, могут перестать работать.

  3. На витрине (если меняем и для витрины) перестанут работать ограничения, связанные с категориями. Например, в блоках будут отображаться все товары. Независимо от того, к какой категории и к какой витрине привязан товар.


После предварительного ревью разработчики подсказывают, что ваше предложение (добавить фильтр по категориям маркетплейса и вендора) может дать прирост в конкретном магазине, но не обязательно будет масштабироваться на все кейсы. Я попрошу его изучить подробнее; если окажется, что оно поможет части аудитории ускорить свои проекты, а другим ничего не сломает, то внедрим в одной из будущих версий. Пока же для нагруженных проектов мы рекомендуем делать оптимизации, исходя из специфики каждого проекта.

P.S. Также все известные нам узкие места мы учитываем, особенно при разработке нового CS-Cart для энтерпрайзов (он же “CS-Cart 5” и “CS-Cart на Laravel”). Если вдруг это сообщение читает кто-то, кто сейчас планирует запуск крупного и высоконагруженного проекта, то уже сейчас может обратиться к нам за подробностями о “CS-Cart для энтерпрайзов”.

1 лайк

Доброго дня! Благодарю за оперативный ответ, но нам нужна пилюля уже сейчас, так как прям беда в рабочем маркетплейса получается.

Для поиска можно использовать текущий запрос, но для первичного формирования списка товаров при входе в каталог хотелось бы использовать другой запрос и тем более если у товаров нет категорий их нужно в первую очередь отработать, так как поле выбора категории оно обязательно при заполнении и чудо с категориями может произойти только в случае если в выгрузки из CommercML произошел сбой или при загруки через импорт и с такими товарами нужно отрабатывать.

Мы же всегда можем вызвать этот запрос как дополнительный, сейчас требуется пилюля для первичной загрузки каталога, помогите решить эту делему.

Уточните пожалуйста сроки предоставления разработчикам-партнерам для анализа этого продукта?
Мы о нем слышали год назад, что он выйдет в начале года, но вот уже год подходит к своему завершению, а мы о нем только слышали легенды, что в сибирских лесах водится такой неведомый зверь.
Нам наши клиенты о нем рассказывают, что Ваши коллеги предлагали им внедрить этот продукт, а мы его даже не ШУПАЛИ ))))

По срокам предоставления партнёрам у меня пока информации нет. Так как сейчас это решение новое и для энтерпрайзов, то пока предлагаем его мы, напрямую потенциальным клиентам. Параллельно готовим нужные материалы для презентации (сравнения по производительности, страницы на сайте и т.п.)

В начале 2022 года мы делали анонс (на который я и сослался), и тогда планировали выпустить во второй половине года. В принципе, так сейчас и происходит.

Вашу обратную связь я зафиксировал. Разработчики изучат проблему, как только появится такая возможность. И если можно будет что-то сделать для будущих версий, то сделают. Сейчас у нас очень много срочных задач в работе: и по выпуску 4.15.2, и по подготовке 4.16.1 (хотелось бы выпустить до конца года).

Если вопрос срочный и критичный, правильнее всего будет делать оптимизацию своими силами, для конкретного клиента и его маркетплейса. Пусть даже с изменением файлов ядра, если без этого никак. Мы видели очень большие маркетплейсы на CS-Cart, и они там довольно сильно адаптировали под себя.