Сравнение шаблонизаторов 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
Спасибо за статью! Подскажите, когда ожидать ZoomX для MODX3?)
Точных сроков дать не могу. Как появится свободное время.
Вопрос: как отловить параллельное использование modx синтаксиса и fenom например. Чанков много вызывается и возможно где то упустил что-то. Плюс интересно посмотреть как упадут результаты при параллельном вызове.
Наверно поиском [[$ по таблицам контента, шаблонов и чанков. Или заюзать событие OnParse.
Добавлю свои 5 копеек в подтверждение по работе fenom vs MODX парсер, раз уж речь про скорость. В телеграм канале постоянно спрашивали об этом тоже.
Я пару лет назад сам переходил на fenom с синтаксиса MODX и сделал 2 шаблона главной страницы — один был на феноме другой на MODX тегах. Причем там и pdoToolse и migx был.
Разница в пользу MODX парсера была 0,01...0,03 сек. как с кешем так и без.
Чуть подробнее t.me/ru_modx/367774
Я пару лет назад сам переходил на fenom с синтаксиса MODX и сделал 2 шаблона главной страницы — один был на феноме другой на MODX тегах. Причем там и pdoToolse и migx был.
Разница в пользу MODX парсера была 0,01...0,03 сек. как с кешем так и без.
Чуть подробнее t.me/ru_modx/367774
Прочитал про размер кэша. Твоё удивление от непонимания. Что такое кэш? Это статичные данные. Если у тебя кэш на феноме в 10 раз меньше, то есть повод задуматься — всё ли закэшировалось? Отсюда и лишние запросы к БД. Конструкция {include 'чанк'} никогда не кэширует чанк.
Просто с таким же успехом можно восхищаться пустой папкой кэша после того, как ты его отключишь.
Просто с таким же успехом можно восхищаться пустой папкой кэша после того, как ты его отключишь.
Сергей, я как раз понимаю что раз кеш уменьшился значит меньше данных попало в кеш. Но от этого принципиально скорость не уменьшилась или увеличилась.
Вот о чем речь. и да там лишние 10 запросов. но в моем случае — не страшно было.
Вот о чем речь. и да там лишние 10 запросов. но в моем случае — не страшно было.
Вспомнился роман Хейли «Колесо». Там создавали новую модель машины и на этапе тестирования возникла проблема — что-то с коробкой передач на определённой скорости. Стоимость доработки 5 долларов. Ерунда. Копейки по сравнению со стоимостью машины. Но разработчики отказались от этой идеи. Причина — планировалось выпустить около 1 миллиона экземпляров. А значит дополнительный расходы составили бы + 5 млн. долларов.
10 лишних запросов для небольшого сайта — плёвое дело. А для высоконагруженного может оказаться непозволительной роскошью.
Подход к кэшированию должен быть вдумчивым. Кэшировать всё подряд также не имеет смысла. Нужно думать об актуализации данных. Поэтому всегда нужно находить баланс. Для этого и нужны опытные разработчики. )
10 лишних запросов для небольшого сайта — плёвое дело. А для высоконагруженного может оказаться непозволительной роскошью.
Подход к кэшированию должен быть вдумчивым. Кэшировать всё подряд также не имеет смысла. Нужно думать об актуализации данных. Поэтому всегда нужно находить баланс. Для этого и нужны опытные разработчики. )
Вот в этой заметке сейчас 890 комментариев и она выводится плюс-минус за 1 секунду на Fenom с разными условиями.
Выводится без кэша, потому что комментарии отличаются для каждого юзера. Админу выводятся удалённые, автору подсвечиваются его ответы и т.д.
Попробуйте это повторить на парсере MODX. Не думаю, что вывод комментариев на сайте это прям такая уж редкая задача.
Выводится без кэша, потому что комментарии отличаются для каждого юзера. Админу выводятся удалённые, автору подсвечиваются его ответы и т.д.
Попробуйте это повторить на парсере MODX. Не думаю, что вывод комментариев на сайте это прям такая уж редкая задача.
Читаем внимательно и до конца.
Даже 100 ресурсов — это большая редкость.Я тебе привожу пример, что нет — не редкость.
Как справится парсер MODX с выводом такой ветки комментариев, если он каждый тэг и условие будет превращать в modTag и запускать его parse?
PHP шаблонизатор всё еще только про удобство, а не скорость?
Замечание принял. А кроме комментариев есть ещё примеры?
П.С. Лично я считаю, что эти тесты искуссвенные. В боевом проекте, где куча чанков, сниппетов и т.д., цифры будут совершенно другие. Вот где интересно было бы погонять тесты.Но судя по отзывам разработчиков, которые меняли синтаксис, разницы особо не видно. Даже часто феном немного проседал.
Или это только про удобство, а не скорость?К самому тесту замечания есть? Я говорю про тест через сниппет в обычном режиме, в котором будут работать 99,9% разработчиков, а не через API.
П.С. Лично я считаю, что эти тесты искуссвенные. В боевом проекте, где куча чанков, сниппетов и т.д., цифры будут совершенно другие. Вот где интересно было бы погонять тесты.Но судя по отзывам разработчиков, которые меняли синтаксис, разницы особо не видно. Даже часто феном немного проседал.
А кроме комментариев есть ещё примеры?pdoTools появился не на пустом месте, а потому что я делал разные сложные сайты, включая bezumkin.ru
К самому тесту замечания есть?Ты даже кода чанков не привёл, тупо итоговые цифры и заявление, что разницы нет.
Если ты эти тесты проводил на одном сайте, и парсер pdoTools был включен — то поздравляю, ты уже пользовался оптимизациями, потому что pdoParser разбирает простые плейсхолдеры сам, без modTag.
Я прямо сейчас создал 2 сайта на modhost.pro. На один установил pdoTools, а на другой нет.
Тестовый сниппет:
<?php
$items = [];
for ($i = 1; $i < 10000; $i++) {
$data = ['id' => rand(), 'pagetitle' => 'page' . rand()];
$items[] = $modx->getChunk('test', $data);
}
$output = number_format(microtime(true) - $modx->startTime, 4) . "\n";
$output .= number_format(memory_get_usage() / 1048576, 4) . "mb\n";
$output .= implode("\n", $items);
return $output;
Простейший чанк:
<p>[[+id]] - [[+pagetitle]] [[+id:is=`10`:then=`1`:else=``]]</p>
Обрати внимание, что чанк без Fenom, чисто синтаксис MODX.Смотрим на 10000 проходов, чтобы разницу было хорошо видно:
— MODX без pdoTools — 1.3216 сек (самый быстрый результат, что удалось увидеть)
— MODX c установленным pdoTools — 0.0557 (самый тормозной результат, было и 0.0156).
Теперь понятно, что парсер MODX без pdoTools просто тормозное говно и твои тесты ни о чём?
Updated 26.04.2022
Попробовал повторить тест еще раз и не смог — оказалось, что я допустил ошибку. Если сниппет использует $modx->getChunk(), то разницы в скорости не будет, потому что pdoParser тогда не работает.
Сниппет должен использовать $modx->getService('pdoTools')->getChunk('test', $data);, тогда всё быстро.
Всё проверил еще раз и накатал новую заметку с результатами.
Так, давайте проясним, чтобы не было недопонимания.
В статье я показал, что если у вас установлен pdoTools, не надо бросаться переписывать все на Fenom и менять [[pdoResources? ...]] на {'pdoResources' | snippet: [...]}, или [[++setting]] на {'setting' | config} ради выигрыша в скорости как советуют некоторые разработчики. Вы его не получите.
П.С. И, да, чанк я взял из теста (тот который с логикой), о чём и написал в начале поста.
В статье я показал, что если у вас установлен pdoTools, не надо бросаться переписывать все на Fenom и менять [[pdoResources? ...]] на {'pdoResources' | snippet: [...]}, или [[++setting]] на {'setting' | config} ради выигрыша в скорости как советуют некоторые разработчики. Вы его не получите.
П.С. И, да, чанк я взял из теста (тот который с логикой), о чём и написал в начале поста.
Сергей, я считаю вполне обоснованным «недопонимание» со стороны Василия, мне бы тоже не понравился упрёк в мою сторону:
Но как же у автора pdoTools получились такие впечатляющие цифры? А всё просто. Тест проводился в API режиме. Т.е. в идеальных условиях для Fenom.И выше Василий показал, что не в АПИ режиме дело.
В качестве вывода могу дать совет. Там, где не нужна логика, используйте синтаксис MODX. Если работаете с логикой, то не путайте синтаксисы — используйте только один.И в конце статьи тогда стоило бы уточнить про предустановку pdoTools, а то создаётся впечатление, что pdoTools с его Fenom не даёт преимуществ на шаблонах без логики.
Сергей, я считаю вполне обоснованным «недопонимание» со стороны Василия, мне бы тоже не понравился упрёк в мою сторонНаверно ты прав. Думаю, будет правильнее удалить это. Статья чисто техническая. И не хотелось бы придавать ей какую-то эмоциональную окраску. И у меня нет никакого упрёка или претензий ни к Василию как к разработчику, ни к pdoTools. Многие из нас участвовали в совершенствовании этой библиотеки. Поэтому знаем все её преимущества. А Василий потратил огромное количество своего времени на её развитие. Только неблагодарный может предъявлять какие-то претензии. Я точно к таким не отношусь.
А недопонимание объясняется легко. К сожалению, у нас с Василием давно уже нет взаимопонимания. И уважительного отношения на личностном уровне. Но я от этого не страдаю. Уверен, и он тоже. И в дальнейшем я не планирую повышать нулевой уровень нашего общения.
И в конце статьи тогда стоило бы уточнить про предустановку pdoToolsА бывают сайты без pdoTools? Лендинги наверно? Но про них говорить смысла нет. Просто я в статье закрепил то, о чем много раз говорил и в чатах и комментариях в ответ на вопросы типа насколько быстрее будет работать сайт, если в карточке товара заменить синтаксис MODX на Fenom. В одном из своих последних комментариев тут я как раз и писал, что главная причина ускорения сайта — это pdoTools.
Многие разработчики сами замечают, что после замены ничего не изменилось по скорости. Как и на не заметил прироста на своём сайте. В этой статье я объяснил почему. Да и сам Василий в своём сегодняшнем посте тоже. Цифры для pdoParser до 100 чанков. Большинство сайтов (может даже 90%) использует пагинацию и даже 100 чанков парсить в цикле не будет. Не у всех на каждой странице сайта 890 комментариев.
У меня такой вопрос, если всё переписано на феном, но внутри сниппета по умолчанию выводится вот так:
@INLINE <ol class="breadcrumb">[[+output]]</ol>
значит ли это что я параллельно использую стандартный парсер?
насколько помню, такие простые теги pdoTools обработает без парсинга, сделав просто str_replace
Алексей выше правильно написал. Простые теги pdoTools заменяет значениями средствами PHP без парсинга.
Чтобы не беспокоить почитателей Василия, который написал интересную статью, только совсем про другое, напишу на своём сайте, в чём Fenom проигрывает стандартному парсеру. Тогда сразу будет понятно, почему я говорю, что тест Василия синтетический.
Чтобы не беспокоить почитателей Василия, который написал интересную статью, только совсем про другое, напишу на своём сайте, в чём Fenom проигрывает стандартному парсеру. Тогда сразу будет понятно, почему я говорю, что тест Василия синтетический.
Сергей, тут читатели почитатели — программисты в основном, а они (мы) довольно прагматичны.
В лично моих глазах и Василий и Вы достойны всяческих похвал и почетных мест в зале/аллее славы MODX!
Теперь по теме:
Наверное, чтобы.избежать разночтений, я только хочу посоветовать для прагматичной точности ваших слов использовать вместо «стандартный парсер» или «MODX парсер» понятную всем здесь формулировку: modParser либо pdoParser. Где то здесь видел что вы считаете что сайтов на MODX без pdoTools в принципе почти нет и потому стандартный для вас это pdoParser.
Я думаю именно этот мелкий на первый взгляд недочёт в вашей статье и всколыхнул сообщество.
Я сам недавно писал где то тут в комментах что с появлением fenom возрасла скорость, за счёт отказа от сниппета if и костылей в виде динамической генерации имени сниппета, которые описал Василий в своем недавнем посте. Вы мне в том комменте ответили что я не врубаю как это работает, а я имел ввиду только отказ от рекурсии изнутри.
Признаться честно, я фанат смешанного синтаксиса, потому что синтаксис MODX-тегов считаю очень крутым, простым и понятным.
Мне как разработчику безусловно нужна скорость итоговая, но и удобство и красота кода для меня не последние слова ;) я уверен и смарти в зумИксе не парсит изнутри наружу рекурсивно, так что тут с феномом не будет разницы.
Пользуясь случаем хочу всем, кто просвещает тут людей вроде меня, не готовых лезть под капот парсеров в силу недостатка скиллов, ещё раз сказать спасибо. Ведь находить нужные слова, ничего не перепутать и подобрать формулировки, чтобы небыло разночтений бывает очень не просто!
В лично моих глазах и Василий и Вы достойны всяческих похвал и почетных мест в зале/аллее славы MODX!
Теперь по теме:
Наверное, чтобы.избежать разночтений, я только хочу посоветовать для прагматичной точности ваших слов использовать вместо «стандартный парсер» или «MODX парсер» понятную всем здесь формулировку: modParser либо pdoParser. Где то здесь видел что вы считаете что сайтов на MODX без pdoTools в принципе почти нет и потому стандартный для вас это pdoParser.
Я думаю именно этот мелкий на первый взгляд недочёт в вашей статье и всколыхнул сообщество.
Я сам недавно писал где то тут в комментах что с появлением fenom возрасла скорость, за счёт отказа от сниппета if и костылей в виде динамической генерации имени сниппета, которые описал Василий в своем недавнем посте. Вы мне в том комменте ответили что я не врубаю как это работает, а я имел ввиду только отказ от рекурсии изнутри.
Признаться честно, я фанат смешанного синтаксиса, потому что синтаксис MODX-тегов считаю очень крутым, простым и понятным.
Мне как разработчику безусловно нужна скорость итоговая, но и удобство и красота кода для меня не последние слова ;) я уверен и смарти в зумИксе не парсит изнутри наружу рекурсивно, так что тут с феномом не будет разницы.
Пользуясь случаем хочу всем, кто просвещает тут людей вроде меня, не готовых лезть под капот парсеров в силу недостатка скиллов, ещё раз сказать спасибо. Ведь находить нужные слова, ничего не перепутать и подобрать формулировки, чтобы небыло разночтений бывает очень не просто!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.