Pull to refresh

Сниппет catalogView для MODx Evolution

Reading time 2 min
Views 3.7K
Представляю вашему вниманию сниппет catalogView. Создавался он для новой версии Shopkeeper — 1.0 (для MODx Evolution), но уже сейчас его можно использовать вместо Ditto.

Я провел небольшой тест производительности обоих сниппетов. Имеем 200 документов. Кэшировать сниппеты нельзя, т.к. требуется постраничная навигация. Брались примерно средние значения после нескольких обновлений страницы.



Вызовы сниппетов:

[!catalogView?
&dataType=`documents`
&tpl=`@FILE:assets/snippets/catalogView/chunks/catalogRow_chunk.tpl`
&parents=`87`
&paginate=`1`
&display=`10`
&sortBy=`pagetitle`
&sortDir=`asc`!]


[!Ditto?
&tpl=`@FILE:assets/snippets/catalogView/chunks/catalogRow_chunk.tpl`
&parents=`87`
&paginate=`1`
&display=`10`
&sortBy=`pagetitle`
&sortDir=`asc`!]


10 документов на странице



catalogView

MySQL: 0.0722 s, 6 request(s), PHP: 0.2756 s, total: 0.3479 s, document retrieved from cache


Ditto

MySQL: 0.1907 s, 32 request(s), PHP: 0.4672 s, total: 0.6579 s, document retrieved from cache


20 документов на странице



catalogView

MySQL: 0.0735 s, 6 request(s), PHP: 0.2934 s, total: 0.3669 s, document retrieved from cache


Ditto

MySQL: 0.2601 s, 52 request(s), PHP: 0.5081 s, total: 0.7683 s, document retrieved from cache


Как видно, Ditto на каждый документ на странице делает по 2 MySQL-запроса. В чанке catalogRow_chunk.tpl есть один нестандартный PHx-модификатор, который используется для изменения формата числа цены: [+price:num_format+]. Если его убрать значения будут такими (20 документов):

catalogView

MySQL: 0.0754 s, 5 request(s), PHP: 0.2794 s, total: 0.3548 s, document retrieved from cache


Ditto

MySQL: 0.2218 s, 32 request(s), PHP: 0.5411 s, total: 0.7629 s, document retrieved from cache


Странно, Ditto стал делать значительно меньше запросов. На каждый документ теперь по одному запросу. catalogView — меньше на один общий запрос. Уж не знаю что там за запрос и зачем делает PHx, ведь код модификатора находится в файле, а не в БД, но не важно. Мне стало интересно почему на каждый PHx-модификатор (нестандартный) при использовании Ditto делается по одному запросу в БД, ведь PHx кэширует такие модификаторы.

Всё оказалось просто. Ditto (2.1.0) не дает PHx возможности кэшировать модификаторы, т.к. при «рендеринге» каждого документа он создает новый объект класса PHx (функция $ditto->render()). Ну и кроме этого, если не использовать PHx-модификаторы из файлов, по одному запросу на каждый документ это слишком.

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

Скачать catalogView 1.0 RC1

P.S. Конечно, пора подумать о MODx Revo, но я решил «добить» Shopkeeper для MODx Evo, выпустив версию 1.0 (сейчас beta).
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+5
Comments 3
Comments Comments 3

Articles