Сравнение скорости работы Wayfinder и pdoMenu

Вопросы к знатокам modx.
Поставил дополнение debugParser.
Смотрю скорость генерации меню (см. картинку)



Все 4 пункта делают одно и то же.

строка 2 — Wayfinder, вызов которого стоит на сайте
строка 3 — вызов pdoMenu с INLINE-шаблонами
строка 4 — вызов pdoMenu, используя синтаксис Wayfinder
строка 5 — вызов pdoMenu, используя синтаксис pdoMenu

Вопросы:
1. почему INLINE-шаблоны медленнее?
2. как-нибудь можно еще ускорить парсинг? Парсинг pdoMenu быстрее в 3 раза, но 1,5 секунды на генерацию меню — перебор.
Александр
01 февраля 2016, 14:33
modx.pro
3 030
0

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

Василий Наумкин
01 февраля 2016, 20:09
+2
Для корректного сравнения нужно как минимум запускать каждый вызов самостоятельно.

А то вдруг окажется, что каждый следующий вызов работает быстрее предыдущего из-за кэша БД или еще чего другого.
    Александр
    02 февраля 2016, 16:00
    0
    Спасибо за ответ, Василий.
    Но прочитав его, расстроился. Причем тут скорость работы БД и ее кеша, если время работы парсера во много раз медленнее (или я цифры в колонках не так трактую?).
    Но делать нечего, раз говорят, что нужно каждый вызов самостоятельно, то пошел отдельно запустил (попутно выкинул со страницы вообще все, кроме данного вызова).
    Построение меню с помощью Wayfinder:


    То же меню с pdoMenu:


    Дальше пошел посмотрел, а что так парсер медленно работает.
    Нашел в файле /core/components/pdotools/model/pdotools/pdomenu.class.php в строках 190 и 194 вызов
    $this->modx->makeUrl(...)
    Заменил 194-ю строку
    с
    $row['link'] = $this->modx->makeUrl($row['id'], '', '', $this->pdoTools->config['scheme']);
    на что-то подобное:
    $row['link'] = '/' . $row['uri'];
    Получил следующую скорость:


    В 3,5 раза быстрее!

    Отсюда вопрос. Можно ли (и могут ли авторы) переписать вызов $this->modx->makeUrl() и не вызывать стандартный генератор URL.

    Посмотрел /core/model/modx/modx.class.php


    а потом /core/model/modx/modcontext.class.php


    и не все мне там понятно.
    Реально это переписать или нет?
      Василий Наумкин
      02 февраля 2016, 16:16
      0
      Реально, конечно — переписывай!
        Алексей
        02 февраля 2016, 17:59
        0
        Переписал! github.com/bezumkin/pdoTools/pull/181
        Включается по настройке &useDirectUrl=`1`
          Алексей
          02 февраля 2016, 18:27
          0
          никак не могу найти заметку, где в pdoTools впервые была реализована замечательная идея замены [[~[[+id]]]] на {{~{{+id}}}}, которая давала очень хороший прирост в скорости, вследствии того, что не создавались объекты для генерирования ссылки через makeUrl();
      Максим Кузнецов
      01 февраля 2016, 20:16
      +3
      Кешируйте вызов pdoMenu, используйте полноценные чанки и перепишите их содержимое на fenom, пропишите &fastMode.

      Вообще, тут скорость во многом упирается в глубину поиска и количество дочерних документов, а дальше по приоритету — хостинг и вложенные сниппеты/модификаторы.

      Для сравнения, на своем сайте на modhost'e (минимальный тариф) некешируемый вызов двухуровнего меню (суммарно ~18 ресурсов) выполняется за 0.06 секунд (кешируемый за 0.01).
        TITAN-UZ
        02 февраля 2016, 16:26
        0
        fastMode для всех сниппетов работает или на некоторых!
        Если включаю fastMode то не обрабатывает некоторые теги
        типа [[+createdby:userinfo=`photo`]], [[+createdby:userinfo=`fullname`]] выводит без этих тегов в pdoResources
          Максим Кузнецов
          02 февраля 2016, 16:28
          0
          Документация.

          Цитата:
          Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны.
            Василий Столейков
            02 февраля 2016, 18:57
            +1
            А можно использовать &fastMode с феномом?
            Феном-теги (условия, сниппеты и т.п.) тоже будут вырезаны?
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        9