Сравнение шаблонизаторов MODX, Fenom и Smarty

В очередной раз прочитав утверждение, что Fenom быстрее стандартного парсера, решил провести указанный в документации pdoTools тест, чтобы расставить все точки над и. Но решил сделать это не отдельными скриптами, как в документации, а практичнее — через сниппет, который будет вызыватся на странице. Плюс добавил для сравнения шаблонизатор Smarty из ZoomX. Так вот, у меня таки есть шо вам сказать.
Как я уже много раз говорил, тест в документации искусстввенный. Редко кто будет выполнять запросы в отдельных скриптах. Да и вряд ли кто может привести пример проекта из своего опыта, где выводятся тысячи ресурсов странице. Даже 100 ресурсов — это большая редкость. Обычно используют пагинацию и выводят по 10-20 одинаковых блоков. Поэтому я не стал замерять парсинг тысячи чанков, а использовал более реальные цифры — 10 и 100. Чанки взял с логикой.
Вывод 10 ресурсов
- Шаблонизатор MODX — 0,05 сек.
- Шаблонизатор Fenom — 0,06 сек.
- Шаблонизатор Smarty — 0,06 сек.
Итог: MODX парсит чанки чуть быстрее. Это указано и в исходном тесте.
Вывод 100 ресурсов
- Шаблонизатор MODX — 0,18 сек.
- Шаблонизатор Fenom — 0,18 сек.
- Шаблонизатор Smarty — 0,18 сек.
Ну давайте уж и для тысячи посмотрим.
Вывод 1000 ресурсов
- Шаблонизатор MODX — 1,31 сек.
- Шаблонизатор Fenom — 1,3 сек.
- Шаблонизатор Smarty — 1,3 сек.
Так что предлагаю не заблуждаться и не путать других. PHP шаблонизаторы не дают значительного прироста скорости. Их преимущество будет заметно при сложной логике. А вот функциональность их значительно превосходит парсер MODX. Он никогда не сможет реализовать подобное.
В качестве вывода могу дать совет. Там, где не нужна логика, используйте синтаксис MODX. Если работаете с логикой, то не путайте синтаксисы — используйте только один.
П.С. Чтобы внести больше ясности хочу отметить, что разговор идёт о среднестатистических сайтах с установленной библиотекой pdoTools.
Комментарии: 20
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Я пару лет назад сам переходил на fenom с синтаксиса MODX и сделал 2 шаблона главной страницы — один был на феноме другой на MODX тегах. Причем там и pdoToolse и migx был.
Разница в пользу MODX парсера была 0,01...0,03 сек. как с кешем так и без.
Чуть подробнее t.me/ru_modx/367774
Просто с таким же успехом можно восхищаться пустой папкой кэша после того, как ты его отключишь.
Вот о чем речь. и да там лишние 10 запросов. но в моем случае — не страшно было.
10 лишних запросов для небольшого сайта — плёвое дело. А для высоконагруженного может оказаться непозволительной роскошью.
Подход к кэшированию должен быть вдумчивым. Кэшировать всё подряд также не имеет смысла. Нужно думать об актуализации данных. Поэтому всегда нужно находить баланс. Для этого и нужны опытные разработчики. )
Выводится без кэша, потому что комментарии отличаются для каждого юзера. Админу выводятся удалённые, автору подсвечиваются его ответы и т.д.
Попробуйте это повторить на парсере MODX. Не думаю, что вывод комментариев на сайте это прям такая уж редкая задача.
Как справится парсер MODX с выводом такой ветки комментариев, если он каждый тэг и условие будет превращать в modTag и запускать его parse?
PHP шаблонизатор всё еще только про удобство, а не скорость?
К самому тесту замечания есть? Я говорю про тест через сниппет в обычном режиме, в котором будут работать 99,9% разработчиков, а не через API.
П.С. Лично я считаю, что эти тесты искуссвенные. В боевом проекте, где куча чанков, сниппетов и т.д., цифры будут совершенно другие. Вот где интересно было бы погонять тесты.Но судя по отзывам разработчиков, которые меняли синтаксис, разницы особо не видно. Даже часто феном немного проседал.
Ты даже кода чанков не привёл, тупо итоговые цифры и заявление, что разницы нет.
Если ты эти тесты проводил на одном сайте, и парсер pdoTools был включен — то поздравляю, ты уже пользовался оптимизациями, потому что pdoParser разбирает простые плейсхолдеры сам, без modTag.
Я прямо сейчас создал 2 сайта на modhost.pro. На один установил pdoTools, а на другой нет.
Тестовый сниппет:
Простейший чанк:
Обрати внимание, что чанк без Fenom, чисто синтаксис MODX.
Смотрим на 10000 проходов, чтобы разницу было хорошо видно:
— MODX без pdoTools — 1.3216 сек (самый быстрый результат, что удалось увидеть)
— MODX c установленным pdoTools — 0.0557 (самый тормозной результат, было и 0.0156).
Внимание, pdoTools просто установлен, и работает по умолчанию. Никаких специальных оптимизаций.Теперь понятно, что парсер MODX без pdoTools просто тормозное говно и твои тесты ни о чём?
Updated 26.04.2022
Попробовал повторить тест еще раз и не смог — оказалось, что я допустил ошибку. Если сниппет использует $modx->getChunk(), то разницы в скорости не будет, потому что pdoParser тогда не работает.
Сниппет должен использовать $modx->getService('pdoTools')->getChunk('test', $data);, тогда всё быстро.
Всё проверил еще раз и накатал новую заметку с результатами.
В статье я показал, что если у вас установлен pdoTools, не надо бросаться переписывать все на Fenom и менять [[pdoResources? ...]] на {'pdoResources' | snippet: [...]}, или [[++setting]] на {'setting' | config} ради выигрыша в скорости как советуют некоторые разработчики. Вы его не получите.
П.С. И, да, чанк я взял из теста (тот который с логикой), о чём и написал в начале поста.
И выше Василий показал, что не в АПИ режиме дело.
И в конце статьи тогда стоило бы уточнить про предустановку pdoTools, а то создаётся впечатление, что pdoTools с его Fenom не даёт преимуществ на шаблонах без логики.
А недопонимание объясняется легко. К сожалению, у нас с Василием давно уже нет взаимопонимания. И уважительного отношения на личностном уровне. Но я от этого не страдаю. Уверен, и он тоже. И в дальнейшем я не планирую повышать нулевой уровень нашего общения.
А бывают сайты без pdoTools? Лендинги наверно? Но про них говорить смысла нет. Просто я в статье закрепил то, о чем много раз говорил и в чатах и комментариях в ответ на вопросы типа насколько быстрее будет работать сайт, если в карточке товара заменить синтаксис MODX на Fenom. В одном из своих последних комментариев тут я как раз и писал, что главная причина ускорения сайта — это pdoTools.
Многие разработчики сами замечают, что после замены ничего не изменилось по скорости. Как и на не заметил прироста на своём сайте. В этой статье я объяснил почему. Да и сам Василий в своём сегодняшнем посте тоже. Цифры для pdoParser до 100 чанков. Большинство сайтов (может даже 90%) использует пагинацию и даже 100 чанков парсить в цикле не будет. Не у всех на каждой странице сайта 890 комментариев.
Чтобы не беспокоить почитателей Василия, который написал интересную статью, только совсем про другое, напишу на своём сайте, в чём Fenom проигрывает стандартному парсеру. Тогда сразу будет понятно, почему я говорю, что тест Василия синтетический.
В лично моих глазах и Василий и Вы достойны всяческих похвал и почетных мест в зале/аллее славы MODX!
Теперь по теме:
Наверное, чтобы.избежать разночтений, я только хочу посоветовать для прагматичной точности ваших слов использовать вместо «стандартный парсер» или «MODX парсер» понятную всем здесь формулировку: modParser либо pdoParser. Где то здесь видел что вы считаете что сайтов на MODX без pdoTools в принципе почти нет и потому стандартный для вас это pdoParser.
Я думаю именно этот мелкий на первый взгляд недочёт в вашей статье и всколыхнул сообщество.
Я сам недавно писал где то тут в комментах что с появлением fenom возрасла скорость, за счёт отказа от сниппета if и костылей в виде динамической генерации имени сниппета, которые описал Василий в своем недавнем посте. Вы мне в том комменте ответили что я не врубаю как это работает, а я имел ввиду только отказ от рекурсии изнутри.
Признаться честно, я фанат смешанного синтаксиса, потому что синтаксис MODX-тегов считаю очень крутым, простым и понятным.
Мне как разработчику безусловно нужна скорость итоговая, но и удобство и красота кода для меня не последние слова ;) я уверен и смарти в зумИксе не парсит изнутри наружу рекурсивно, так что тут с феномом не будет разницы.
Пользуясь случаем хочу всем, кто просвещает тут людей вроде меня, не готовых лезть под капот парсеров в силу недостатка скиллов, ещё раз сказать спасибо. Ведь находить нужные слова, ничего не перепутать и подобрать формулировки, чтобы небыло разночтений бывает очень не просто!