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

    Представляю вашему вниманию сниппет 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).
    Поддержать автора
    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 3

      +1
      Спасибо. Попробую.
      Баги куда отсылать если что?
      0
      Удобная замена Ditto…
      Буду использовать, спасибо!

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое