Алексей Смирнов

Алексей Смирнов

Был в сети 05 декабря 2025, 08:42
Заказы не принимаю
Ну да, в категориях находиться около 20...60к товаров (разные паренты), а не все 200.
В результате фильтрации в выборрку попадало около 10к ресурсов. у меня в корневом каталоге. те по всем товарам + 1...2 опции на фильтрацию и получал 10к
А по БД вроде ничего не делал. это был бегет и все стандартно было тк нужно было тестануть различия в скорости.
У меня там было 200к ресурсов и 4мл записей опций.
Если вернусь к своему магазину (он небыл выпушен в общественный релиз), возможно подниму тему скорости и оптимизации. но это в след. году. тогда и протестить еще раз смогу, тк я повернут на скорости, и хочется точно оценить масштаб. может и в правду на mfilter это было на 5...10 сек… (уверен я погорячился про 3 секунды), тк я помню что минишоповский я тестировал потом только через выборки msProduct и + своего сниппета.
будет время — подниму бекапы.
но там точно я не видел таких цифр под 30 сек.
Я про опции, тк кол-во значений (флажков) не особо влияют на результат.
Поэтому у меня в 20 опциях я делал примерно то ли 10 то ли 20 значений. те 20 опций * 10 значений — скромные 200 флажков (как вы выражаетесь).
Вот вам материал еще подумать:
> 3.mFilter2
Странно что у вас получились цифры под 39 сек для 11к товаров. — у вас что-то не то с БД.
Тк я тестировал 200к ресурсов с 20ю опциями и фильтрация + выборка проходила примерно 1..3 сек.
Во вторых, чтобы ускорить выборку даже в самом msProduct minishop2 необходимо переписывать фильтр на прямые запросы. тк сжирает ресурсы и время в основном xpdo modx.
Я писал свой магаз тестовый с нуля и делал другую структуру данных. и у меня получались выборки опций до 0,5 сек для 200к товаров с 20...40 опциями. А из кеша вообще копейки.
Вам нужно в сниппете сделать сразу через минимальный шаблон или написать:
$sth = $modx->query("SELECT * FROM gtgbs_yclients_staff");
    $result = $sth->fetchAll(PDO::FETCH_ASSOC);
     $name = '';
    foreach ($result as $data) {
if ($fidata == $data['name']) {
$data['chekedis'] = 'checked';
}

$name .= $modx->getCunck($tpl,$data);
}
//$modx->setPlaceholder('name',$name);
return $name;
И вызывать
[[!+test? &tpl=`@INLINE <input type="checkbox" name="[[+name]]" 
value="[[+name]]" [[+chekedis]] >` &fidata=`[[!+fi.color]]`]]
Ну делается относительно просто.
1. Для страницы где статья tpl-ки просто замените на пустоты и уберите идентификаторы, чтобы по ajax комментарии тоже не подгружались.
2. в этом же сниппете выставьте нужный параметр thread в доке прочитайте назначение.
Как-то так.
Хм… А у вас точно Бани (31) и Бани Гефест (12396) являются категориями магазина? Проверьте что у этих категорий в настройках указан тип ресурса — КАТЕГОРИЯ ТОВАРА.
И так же и проверьте что этот сниппет вы вызываете на странице с id 24, 31, 12396 и у них одинаковый шаблон.