Как стать автором
Обновить

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

Время на прочтение2 мин
Количество просмотров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).
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 13: ↑9 и ↓4+5
Комментарии3

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн