Тормоза msProducts при условии &sortby=`RAND()`

Добрый день.
Есть сайт modxtestsite.cx.ua с залитыми ~4000 единиц товаров. Из них опубликовано ~ 2000. На каждый товар по 4-5 TV.
На главной странице делаю выборку
[[!msProducts?
        &parents=`10000`
        &limit=`6`
        &tpl=`productsTab_msTpl`
        &sortby=`RAND()`
]]
Страница жутко долго загружается. Сервис PageSpeed Insights даже выдаёт ошибку: «Lighthouse returned error: FAILED_DOCUMENT_REQUEST. Lighthouse was unable to reliably load the page you requested. Make sure you are testing the correct URL and that the server is properly responding to all requests. net::ERR_TIMED_OUT.»
Пробую убрать условие &sortby=`RAND()`, скорость загрузки сразу увеличивается и PageSpeed Insights выдаёт показатель порядка 75-80. Но RAND() мне нужен на странице по задумке.
Как можно ускорить/оптимизировать?

PS showLog выдаёт следующее:
0.0001841: pdoTools loaded.
0.0034468: Conditions prepared
0.0001030: xPDO query object created
0.0003190: leftJoined msProductData as Data
0.0002050: leftJoined msVendor as Vendor
0.0000112: Grouped by msProduct.id
0.0001659: Added selection of msProduct: `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `alias_visible`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`
0.0001111: Added selection of msProductData: `article`, `price`, `old_price`, `weight`, `image`, `thumb`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`
0.0001440: Added selection of msVendor: `name` AS `vendor.name`, `resource` AS `vendor.resource`, `country` AS `vendor.country`, `logo` AS `vendor.logo`, `address` AS `vendor.address`, `phone` AS `vendor.phone`, `fax` AS `vendor.fax`, `email` AS `vendor.email`, `description` AS `vendor.description`, `properties` AS `vendor.properties`
0.0097561: Processed additional conditions
0.0110300: Added where condition: class_key=msProduct, msProduct.parent:IN(10000,1,246,310,425,568,696,1471,3187,2,25,40,212,5,6,8,9,10,13,14,15,16,17,18,19,20,21,22,23,24,2026,2329,2447,2461,2634,2677,2743,2832,2833,2834,2835,2858,2859,2941,2942,2965,2966,3010,3183,3184,3316,3317,3418,3480,3484,3547,3754,3755,3765,3969,3973,3974,3975,3976,3977,3978,4041,4060,4061,4062,4141,4157,4160,26,27,28,29,30,31,32,...............Здесь идут айди всех товаров ............ 4226), msProduct.published=1, msProduct.deleted=0
0.0001130: Sorted by RAND(), ASC
0.0000081: Limited to 6, offset 0
0.0007951: SQL prepared "SELECT `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`alias_visible`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`, `Data`.`article`, `Data`.`price`, `Data`.`old_price`, `Data`.`weight`, `Data`.`image`, `Data`.`thumb`, `Data`.`vendor`, `Data`.`made_in`, `Data`.`new`, `Data`.`popular`, `Data`.`favorite`, `Data`.`tags`, `Data`.`color`, `Data`.`size`, `Data`.`source`, `Vendor`.`name` AS `vendor.name`, `Vendor`.`resource` AS `vendor.resource`, `Vendor`.`country` AS `vendor.country`, `Vendor`.`logo` AS `vendor.logo`, `Vendor`.`address` AS `vendor.address`, `Vendor`.`phone` AS `vendor.phone`, `Vendor`.`fax` AS `vendor.fax`, `Vendor`.`email` AS `vendor.email`, `Vendor`.`description` AS `vendor.description`, `Vendor`.`properties` AS `vendor.properties` FROM `site_content` AS `msProduct` LEFT JOIN `ms2_products` `Data` ON `msProduct`.`id` =  `Data`.`id` LEFT JOIN `ms2_vendors` `Vendor` ON Data.vendor=Vendor.id WHERE  ( `msProduct`.`class_key` = 'msProduct' AND `msProduct`.`parent` IN (10000,1,246,310,425,568,696, ...............Здесь идут айди всех товаров ............ 4226) AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 )  GROUP BY msProduct.id ORDER BY RAND() ASC LIMIT 6 "
0.1560180: SQL executed
0.0001209: Rows fetched
0.0001349: Returning raw data
0.0015600: Checked the active modifiers
0.0070782: Loaded "modChunk" with name "productsTab_msTpl"
0.0722980: Compiled Fenom chunk with name "modchunk/31"
0.0018709: Loaded "modSnippet" with name "phpthumbof"
0.0028250: Loaded "modSnippet" with name "priceFormatter"
0.0128639: Time to load products options
15.8525579: Total time
35 651 584: Memory usage
Артём
10 декабря 2018, 14:05
modx.pro
1 624
0

Комментарии: 8

Наумов Алексей
10 декабря 2018, 15:08
0
Наверное стоит попробовать побороть наличие parent:IN в получаемом запросе…
    Василий Наумкин
    10 декабря 2018, 15:59
    0
    А смысл?
    0.1560180: SQL executed

    Запросы выполняется за 0.15 сек, вместе с условиями и случайной сортировкой. Итог же — 15 секунд, значит проблема не в запросе.

    Учитывая наличие phpthumbof в логе, предположу, что при появлении новых случайных записей в выводе, для них генерируются превьюшки и тормоза именно отсюда.
      Артём
      10 декабря 2018, 17:20
      0
      Да, если убрать phpthumbof, скорость загрузки значительно увеличивается — 0,21 сек против 15. Спасибо.
      Но теперь встаёт вопрос, как можно это обойти, если phpthumbof нужен (в частности для наложения WM)?
        Артём
        10 декабря 2018, 17:31
        0
        Да и просто оставить phpthumbof для ресайза (без WM) тоже не сильно исправляет ситуацию. Скорость загрузки показывает 3 секунды.
          Василий Наумкин
          10 декабря 2018, 18:18
          0
          Почитай про возможности встроенной галереи miniShop2
            Артём
            10 декабря 2018, 18:37
            0
            Вы про настройку параметров источника файлов MS2 Images? В ту сторону копать? И если да, то водяные знаки можно так же через fltr задать?
              Артём
              11 декабря 2018, 13:42
              0
              Не создаю новую тему, т.к. она связана с этой, но тут возник один вопрос. С целью ускорения загрузки страницы я воспользовался Вашим советом и ушёл от phpthumbof. В настройках параметров источника файлов MS2 Images я прописал вот такой набор параметров генерации превьюшек:
              {"thumb":{"w":173,"h":173,"q":100,"zc":"1","bg":"000000"},"thumb_hover":{"w":173,"h":173,"q":100,"zc":"1","bg":"000000","fltr":"wmi|/assets/images/products/wm.jpg|C|80"}}
              Залил изображения товаров. В каталогах для каждого товара создались папки «thumb» и «thumb_hover», в которых лежат созданные превьюшки. Тут всё ОК.
              В вызове сниппета msProducts я добавляю &includeThumbs=`thumb,thumb_hover`. В чанке вызываю [[+thumb]] и [[+thumb_hover]]. Но выводится только изображение [[+thumb]], а [[+thumb_hover]] пусто. ЧЯДНТ?
                Артём
                11 декабря 2018, 13:59
                0
                Странно, но fenom заработал: {$thumb_hover}.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8