Всего 123 801 комментарий

Pavel Zarubin
22 декабря 2022, 15:33
0
а на slave
А как slave должен ускорить?
еще и кешированием
Оооо… тут вообще можно бесконечно рассуждать, говоря о кешировании, вы как, батенька кешируете? Например если ты кешируешь в файловую систему, то, забрать из fs будет сильно дороже по ресурсам и времени, нежели забрать из БД с правильными индексами. По другому обстоят дела если это memcached или redis, но тут будут и другие подводные камни, мы же говорим о базовой реализации, не так ли?
Александр Туниеков
22 декабря 2022, 15:16
0
1500 товаров у меня нормально работают. Тормоза начинаются с 4000 товаров на мин тарифе. А вот на производительных серверах не понятно.
Павел Бигель
22 декабря 2022, 15:11
0
отрицательный когда фильтрация падает не на мастер базу, а на slave еще и кешированием?)
Pavel Zarubin
22 декабря 2022, 15:09
0
Вообще, думаю не будет ни для кого откровением, что laravel — один из самых медленных php фреймворков, он ориентируется не на скорость, он ориентируется на пользователей и простоту использования и ради этого жертвует скоростью
m.ryadn
22 декабря 2022, 15:05
0
Добрый день!

Вопрос такой, возможно ли один отзыв прикреплять к нескольким цепочкам? То есть, например, при публикации отзыва клиент выбирает на какого врача он хочет оставить отзыв, какой услугой воспользовался и в какой клинике. Соответственно, как я понимаю, отзыв должен залететь в 4 цепочки: все отзывы, отзыв на врача, отзыв на услугу, отзыв на клинику.
Pavel Zarubin
22 декабря 2022, 15:03
0
На тот момент, когда я ушел в laravel (это была еще 6.х версия) modx показывал на голой странице с выборкой из бд 1000 элементов гораздо меньше потребления и по памяти и по CPU, как сейчас дела обстоят не знаю, но подозреваю что +- также, да это и не удивительно, laravel из коробки содержит логики в несколько раз больше, чем modx, да и PSR ООП само по себе тяжелее, нежели легаси modx
Та же eloquent содержит в себе сильно больше логики и обвязки (потому что хочет быть похожей на ORM, но ей не является) чем пусть и кривоватый, но конструктор запросов под названием pdoTools
Stepan
22 декабря 2022, 15:01
0
да, проблема была в самом yandex там без пол литра в правах не разберешься
deleted
22 декабря 2022, 14:53
0
> что сам laravel сильно тяжелее того же modx

а чем тяжелее, можно подробнее?)
Pavel Zarubin
22 декабря 2022, 14:38
0
профит скорее всего есть
Хотелось бы услышать, какой?
Боюсь что он будет даже отрицательный, нежели положительный
Не меняя подход к выборке (например параллельные запросы), не меняя архитектуру базы данных, не проставляя индексы какое время вы хотите выиграть? А прослойка в виде api скорее всего только тормозит результаты
Дима Касаткин
22 декабря 2022, 14:33
0
Так хотя бы профит будет
Да брось, профит скорее всего есть, только тестов нет… А чтобы это исправить надо всё это поднять, попробуем-с…
Алексей Шумаев
22 декабря 2022, 13:19
0
Насколько я понял: ларавель тут просто для примера, ибо не суть важно.
Если уж микросервис, то я бы Slim использовал.
deleted
22 декабря 2022, 13:08
0
Использование встроенных фильтров в mSearch вас немного ограничивает.
А чем ограничивает? Ни разу mSearch2 не использовал, любопытно просто.

Тоже не понял, зачем тут Laravel. Ради Eloquent? Так его можно и к MODX прикрутить)
seosavspb
22 декабря 2022, 11:43
0
Ну вот для меня это сейчас задача сложная((( буду грызть гранит науки спасибо большое
Lori
22 декабря 2022, 11:14
0
Ответ на вопрос, который ты написал в ЛС (сообщения у тебя закрыты):
Да, я написал плагин на событие msOnChangeInCart и менял вес товара в корзине. Код скинуть не смогу, ибо это было давно и доступы у меня не сохранились, скажу лишь, что тогда задача казалось сложной, ибо в PHP я был не силен, сейчас же это на 5-10 минут от силы, стоит лишь почитать доку minishop2 и потренироваться. Успехов
Алексей Шумаев
22 декабря 2022, 11:11
0
Насколько я помню, 1500 товаров нормально работают на мин тарифе бегета с suggestions. Если фильтров не очень много, конечно. Таких сайтов в своё время море наделано было.
Pavel Zarubin
22 декабря 2022, 10:08
+3
Странное решение честно говоря
1) Зачем тут использовать laravel? Какие он преимущества даст, кроме собственного удовлетворения что теперь то «все красиво»
2) В быстрой фильтрации важнее правильные индексы и в принципе архитектура бд, laravel на это никак не повлияет
3) «Микросервисы» на PHP сложно назвать микросевисами, хотя бы потому, что они обмениваются по json api (вместо gRPC например) который медленный и сильно нагружает сеть, я уже молчу о том, что сам laravel сильно тяжелее того же modx

По мне лучше бы показал как интегрировать какой нибудь легковесный полнотекстовой поиск, по типу meilisearch и на основе него уже построить фильтрацию, а уже что там будешь использовать для обращения к api meilisearch laravel, modx или нативный php уже не важно
Так хотя бы профит будет
Александр Туниеков
22 декабря 2022, 07:35
0
У меня на поддержке осталось несколько магазинов, например:
1) 96000 товаров и 12 фильтров
2) 9000 и 55 фильтров (индексы в мускуле для msProductData уже закончились) :-)
modhost на максимальном тарифе, проблем нет, всё и всегда нормально работает, каких-то заметных задержек в фильтрах нет. Все свойства реализованы расширением msProductData.
Ну я вот на производительных серверах не тестировал. Интересно насколько влияет проиводительность сервера.
Вообще говоря для каталогов с больше 1500 товаров по умолчанию отключается suggestions и скорость значительно выше. Но фильтр значительно не удобнее.
Разработчик
22 декабря 2022, 01:40
0
Спасибо за ответ) Мне тут помогли немного, когда поставил Fenom, то все получилось сделать)) Ранее пробовал сделать без него и очень не хватало свободы))
Разработчик
22 декабря 2022, 01:38
0
Спасибо за ответ)

Тут не совсем стандартный проект, тут получается как каталог продуктов, что-то вроде рейтинга. Как такового каталога там нет.

Я решил проблему через where у pdoResources

Может косячно, но пока работает

1. Вот тут я собрал все контейнеры (папки) в которых лежат ресурсы. Так как все ресурсы выводятся на одной странице по папкам. Где первый элемент наверху, остальные скрыты в контейнере, то сделал так.

<div class="py-8 bg-light">
                <div class="container">
                    <div class="group-last-child">
                        [[!pdoResources?
                           &depth=`1`
                           &where=`{"isfolder":"1"}`
                           &tvPrefix=``
                           &tpl=`Tpl-lvl-1-catalog-All-Deposits`
                           &sortby=`{"menuindex":"ASC"}`
                           &includeTVs=`valuta, time-if-deposit`
                        ]]       
                    </div>
                </div>
            </div>

На этот этапе я фильтрую результат, сделав сниппет-обертку
Total — мне нужно для того, чтобы знать сколько элементов в папке и сравнивать с последним. Сравнивать с последним нужно для закрывающего тэга обертки. А открывается тег обертки на втором.

[[!mySnippetFilter?
   &parents=`[[+id]]`
   &depth=`5`
   &tplFirst=``
   &resources=``
   &tvPrefix=``
   &tpl=`Tpl-lvl-2-Bank-All-Deposits`
   &sortby=`{"menuindex":"ASC"}`
   &includeTVs=`valuta, time-if-deposit, from-sum-deposit, bet-for-deposit`
   &setTotal=`1`
   &toPlaceholder=`myOut`
]]  
[[+myOut]]

Данный снипет является оберткой над pdoResources, нужен для фильтрации результата

Сниппет представляет собой

$where = Array();

if(count($_POST['tv'])) {
    $where = array_merge($where, $_POST['tv'] );
    if (count($where['from-sum-deposit:<='])) {
        unset($where['from-sum-deposit:<=']);
    };  
    if (!empty($where['srok']) and $where['srok'] == 'all' ) {
        unset($where['srok']);
    }
}

$scriptProperties['where'] = json_encode($where);
$html = $modx->runSnippet('pdoResources', $scriptProperties);
echo $html;

А вывожу я все это при помощи Fenom на странице

{set $total = $_modx->getPlaceholder('total')} Присваиваю последний элемент переменной
{if $idx == 1} // Если это первый элемент, для него определенный вывод
Тут код чанка для первого элемента
{else}
{$idx == 2? 'код открытия оболочки для второго и последующих элементов, эта оболочка появляется и скрывается по кнопке' : ' '}
код для элементов внутренних, начиная от второго и дальше
{$idx == $total? 'проверка на последний элемент, получается если total равен idx тогда он последний и я закрываю два дива':''}
{/if}
Конечно тут накручено, но кое как с помощью получилось мне получить последний элемент в выдаче pdoResources))) Пока работает, в целом как мне нужно
Разработчик
22 декабря 2022, 01:28
0
Не совсем, точнее это было нужно немного для другого ))

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

<div class="py-8 bg-light">
                <div class="container">
                    <div class="group-last-child">
                        [[!pdoResources?
                           &depth=`1`
                           &where=`{"isfolder":"1"}`
                           &tvPrefix=``
                           &tpl=`Tpl-lvl-1-catalog-All-Deposits`
                           &sortby=`{"menuindex":"ASC"}`
                           &includeTVs=`valuta, time-if-deposit`
                        ]]       
                    </div>
                </div>
            </div>

Это сниппет — Tpl-lvl-1-catalog-All-Deposits

[[!mySnippetFilter?
   &parents=`[[+id]]`
   &depth=`5`
   &tplFirst=``
   &resources=``
   &tvPrefix=``
   &tpl=`Tpl-lvl-2-Bank-All-Deposits`
   &sortby=`{"menuindex":"ASC"}`
   &includeTVs=`valuta, time-if-deposit, from-sum-deposit, bet-for-deposit`
   &setTotal=`1`
   &toPlaceholder=`myOut`
]]  
[[+myOut]]

Данный снипет является оберткой над pdoResources, нужен для фильтрации результата

Сниппет представляет собой

$where = Array();

if(count($_POST['tv'])) {
    $where = array_merge($where, $_POST['tv'] );
    if (count($where['from-sum-deposit:<='])) {
        unset($where['from-sum-deposit:<=']);
    };  
    if (!empty($where['srok']) and $where['srok'] == 'all' ) {
        unset($where['srok']);
    }
}

$scriptProperties['where'] = json_encode($where);
$html = $modx->runSnippet('pdoResources', $scriptProperties);
echo $html;

А вывожу я все это при помощи Fenom на странице

{set $total = $_modx->getPlaceholder('total')}
{if $idx == 1}
Тут код чанка для первого элемента
{else}
{$idx == 2? 'код открытия оболочки для второго и поледующих элементов, эта оболочка появляется и скрывается по кнопке' : ' '}
код для элементов внутренних, начиная от второго и дальше
{$idx == $total? 'проверка на последний элемент, получается если total равен idx тогда он последний и я закрываю два дива':''}
{/if}

Конечно тут накручено, но кое как с помощью получилось мне получить последний элемент в выдаче pdoResources))) Может и косячно, но пока работает)