Всего 125 945 комментариев

Александр Туниеков
20 октября 2022, 17:30
0
39с это из-за того что на тестовой инсталяции значения из msProductData брал.
{'!mFilter2' | snippet : [
                'showLog'=>1,
                'suggestions'=>1,
                'parents'   =>  $_modx->resource.id,
                'cacheTime'=>600,
                'limit'=>100,
                'suggestionsMaxFilters'=>10000,
                'filters'=>'
                ms|size:default,
                ms|insert:default,
                ms|material:default,
                ms|style:default,
                ms|metal_color:default,
                ms|sample_material:default,
                ms|insert_color:default,
                ms|insert_form:default,
                ms|cover:default,
                ms|appointment:default,
                ms|weaving_type:default,
                ms|for_whom:default',
            ]}
В коде msearch
foreach ($filters as $table => &$fields) {
				$method = 'get' . ucfirst($table) . 'Values';
				$keys = !empty($duplicates[$table])
					? array_diff(array_keys($fields), array_keys($duplicates[$table]))
					: array_keys($fields);
				if (method_exists($this->filtersHandler, $method)) {
					$fields = call_user_func_array(array($this->filtersHandler, $method), array($keys, $ids));
То есть, значения собираются для каждой опции отдельно. 12 раз пробегается по каталогу из 11к товаров.
Блин 1 раз пробегается :-(
Вот я повернут на объективности. Обманывая других часто обманываешь и себя. А это уже чревато. Лучше честно признать ошибку и придумать новое лучшее. Это не к Вам если что. Просто лирика про себя :-).
Скорость отдачи страницы больше секунды это уже плохо. Тем более если страница для покупателей.
Спасибо что поделились своим опытом. Будет интересно взглянуть на результаты Ваших тестов.
Артур Шевченко
20 октября 2022, 17:11
0
Ну это нормально, почему так не скажу, но используй $_modx->getPlaceholder('code') или $_pls['code'] или 'code' | placeholder. Первое и последнее одно и то же.
Алексей Смирнов
20 октября 2022, 16:57
0
Ну да, в категориях находиться около 20...60к товаров (разные паренты), а не все 200.
В результате фильтрации в выборрку попадало около 10к ресурсов. у меня в корневом каталоге. те по всем товарам + 1...2 опции на фильтрацию и получал 10к
А по БД вроде ничего не делал. это был бегет и все стандартно было тк нужно было тестануть различия в скорости.
У меня там было 200к ресурсов и 4мл записей опций.
Если вернусь к своему магазину (он небыл выпушен в общественный релиз), возможно подниму тему скорости и оптимизации. но это в след. году. тогда и протестить еще раз смогу, тк я повернут на скорости, и хочется точно оценить масштаб. может и в правду на mfilter это было на 5...10 сек… (уверен я погорячился про 3 секунды), тк я помню что минишоповский я тестировал потом только через выборки msProduct и + своего сниппета.
будет время — подниму бекапы.
но там точно я не видел таких цифр под 30 сек.
Александр Туниеков
20 октября 2022, 16:40
0
Так есть один вариант. mFilter2 при запросе собирает информацию с выбранного каталога товаров, а не со всей базы данных. Если 200к товаров разбросанны по каталогам с 4000 товаров, то фильтрация как раз и 1-3сек будет :-)
Александр Туниеков
20 октября 2022, 16:28
0
200к товаров на 200 значений это 40 000 000 записей в базе.
В станданртной ситуации mFilter2 не может обработать 40 000 000 записей быстро.
Колитесь что Вы сделали? :-)
Александр Туниеков
20 октября 2022, 16:22
0
Просто следую правилам :-) Могу Вас на Вы называть.
Александр Туниеков
20 октября 2022, 16:20
0
Интересно что тогда влияет???
Вообще тестовая база у меня от людей которые расширили msProductData через msfieldsmanager в том числе и json полями. У меня собрать с каталога с msProductData на тестовой инсталяции уходит 39с.
У них фильтр работает по полям msOption и собрать данные уходит примерно в течении 10с.
У них шаред хостинг бегет.
То есть никаких 1-3с на 200к товаров не может быть на шаред хостингах.
Что за различия? Как-то оптимизировали базу?
Алексей Смирнов
20 октября 2022, 16:15
0
Если я тебя задел этим (что на вы обратился), извиняюсь. Я привык к не знакомым людям в реале и не в реале обращаться на Вы.
Успеха в поиске решений
Александр Туниеков
20 октября 2022, 16:10
0
как вы выражаетесь
Из правил modx.pro
Здесь все друзья и обращение на «ты» говорит только об этом. Не нужно вычурной вежливости, мы люди простые.
Алексей Смирнов
20 октября 2022, 16:08
0
Делал давно, уже не помню точно все…
Алексей Смирнов
20 октября 2022, 16:06
0
Я про опции, тк кол-во значений (флажков) не особо влияют на результат.
Поэтому у меня в 20 опциях я делал примерно то ли 10 то ли 20 значений. те 20 опций * 10 значений — скромные 200 флажков (как вы выражаетесь).
Александр Туниеков
20 октября 2022, 16:02
0
Я писал свой магаз тестовый с нуля и делал другую структуру данных
Поделись структурой плиз.
Александр Туниеков
20 октября 2022, 15:57
0
я тестировал 200к ресурсов с 20ю опциями
С 20 опциями или с 20 флажками?

У меня 400 флажков. А у тебя сколько?
у вас что-то не то с БД.
БД стандартное.
Алексей Смирнов
20 октября 2022, 15:35
0
попробуйте combo-box или listbox. Возможно что-то сработает, но не уверен — не пробовал.
Алексей Смирнов
20 октября 2022, 15:30
0
Вот вам материал еще подумать:
> 3.mFilter2
Странно что у вас получились цифры под 39 сек для 11к товаров. — у вас что-то не то с БД.
Тк я тестировал 200к ресурсов с 20ю опциями и фильтрация + выборка проходила примерно 1..3 сек.
Во вторых, чтобы ускорить выборку даже в самом msProduct minishop2 необходимо переписывать фильтр на прямые запросы. тк сжирает ресурсы и время в основном xpdo modx.
Я писал свой магаз тестовый с нуля и делал другую структуру данных. и у меня получались выборки опций до 0,5 сек для 200к товаров с 20...40 опциями. А из кеша вообще копейки.
Александр Туниеков
20 октября 2022, 14:40
0
Manticore Search вариация Sphinx. Вчера пробовал установить OpenSearch вариацию ElasticSearch. Не поднял. Не справился с настройкой Docker :-(. Дальше без докера попробую, но пока некогда. Через неделю две пробовать буду.
Вариации Sphinx, ElasticSearch требуют vds или отдельного выделенного сервера или даже кластера серверов. Они прожорливы. ElasticSearch требует минимум 60гб на сервере. OpenSearch у меня не запускался пока размер диска на виртуалке до 100гб не поднял.
OpenSearch можно на https://aws.amazon.com/ru/opensearch-service/ подключить. Есть бесплатный тариф, но не понятно насколько его хватает. Платный тариф 1604,83 USD
Сергей Карпович
20 октября 2022, 12:42
0
нашелся виновник — плагин YandexMarket2.
разработчику написал в техподдержку, будем уже с ним решать
Павел Голубев
20 октября 2022, 12:10
0
ок, тогда можно рассмотреть типа такой штуки manticoresearch.com. Фасетный поиск из коробки manual.manticoresearch.com/Searching/Faceted_search и php клиент есть github.com/manticoresoftware/manticoresearch-php
Сергей Карпович
20 октября 2022, 11:24
0
Не меняли, стоит 7.4, попробовал обновить до 8 — проблема осталась