В комментариях к моей статье в сообществе я обещал показать, всегда ли есть смысл переводить сайт полностью на Fenom. Если честно, я уже несколько остыл и у меня пропал интерес к этой теме и желание кому-то что-то доказывать. Но раз обещал, нужно обещание выполнять. По-хорошему тут больше подошло бы видео. Но по вышеописанным причинам я пойду более простым путём — ограничусь небольшой статьёй.

Итак, сразу, определим вводную — в качестве парсера используется pdoParser из pdoTools. Он может работать как с MODX тегами, так и с Fenom. Именно pdoParser отвечает за значительное ускорение сайта благодаря серьёзной оптимизации процессов обработки запросов и парсинга.

А вот касательно использования шаблонизатора Fenom не всё так однозначно. Его возможности значительно превосходят возможности стандартного синтаксиса. Но как это обычно бывает, за эти возможности приходится платить. Если сравнивать Fenom с другими PHP шаблонизаторами, то принципиальных отличий мы не найдём — все они компилируют исходный шаблон в PHP файл. Но MODX шаблонизатор использует другой подход — рекурсивный парсинг регулярными выражениями. И это значительно ограничивает возможности, но упрощает синтаксис. Он более лёгкий, простой. Многим он нравится. Особенно простым пользователям, далёким от программирования.

На самом деле, если задуматься, то быстро придёт понимание, что возможности MODX шаблонизатора не так уж и убоги. Просто всю сложную бизнес-логику из шаблона нужно перенести в сниппет, который выведет уже готовый результат. Или использовать сниппеты-модификаторы.

Думаю, многие уже готовы задать вопрос — так в чём и в каких случаях Fenom проигрывает MODX синтаксису? Василий, в ответ на мою статью, написал свою, чтобы доказать, что Fenom всегда на голову выше. Но на самом деле, он ещё раз доказал мою правоту. Обращаю ваше внимание на эти цифры -

Как видим, обработка тегов MODX чуть быстрее. А если учесть, что большинство сайтов, как правило, используют пагинацию, т.е. органичивают цикл небольшим числом, то разница будет ещё больше. Да и не всегда нужно парсить большие списки. Аргумент Василия про то, что на сайте modx.pro есть посты с сотнями комментариев, где преимущество Fenom становится очевидным, справедлив. Но, я бы сказал, что это единичный случай. У нас на работе тяжёлый сайт с разной степерью сложности логики в шаблонах. И у нас нет комментариев. И для больших списков используется пагинация. Большая часть шаблонов переведена на Fenom и файлы. Главная страница открывалась из кэша за 1,3 сек. и при этом делала около 300 запросов в БД. После беглой оптимизации количество запросов снизилось до 200, а скорость до 0,5 сек. Дальше уже нужно делать глубокую оптимизацию, но это уже совсем другая история. А мы вернёмся к синтаксису Fenom.

Поговорим об искусственности теста Василия. Что он показывает? Что на 1000 циклов разница сумашедшая. Согласен. На 10 тыс. разница будет ещё больше. На 100 тыс. вообще получится 1-я космическая скорость. Но давайте будем честны, не на каждой странице нужно парсить тысячи, и даже сотни, чанков. Да и не на каждом сайте. Но на каждом сайте будут десятки секций с тегами. В одном head их будет не один и не два. И какие теги использовать — MODX или Fenom?

Для сайта с парой сотен посещений в день особой принципиальной разницы не будет. Но как только сайт становится активно посещаемым, встаёт задача оптимизации нагрузки. И первым шагом что делают? Правильно, настраивают кэширование. В идеальном случае на каждый запрос отдавать статическую страницу. Ну или хотя бы максимально статичную — оставить динамику только там, где невозможно без неё. И вот мы подошли к слабому месту Fenom. MODX справляется с этой задачей на раз-два. Как и Smarty к слову. Но у Fenom своя логика — как только вы подключили в шаблоне ресурса файловый шаблон Fenom,

{include 'file:templates/index.tpl'}

то сразу забудьте про кэш. Свои теги Fenom и так никогда не кэширует. Но мало кто знает, что и теги MODX перестают следовать логике кэширования MODX. Соответственно, результат парсинга двух страниц (у одной стандартный шаблон MODX, а у другой файловый) с следующим кодом

<p><a href="[[~1]]">[[#1.pagetitle]]</a></p>
<p><a href="[[~2]]">[[#2.pagetitle]]</a></p>

будет выглядеть по разному. В первом случае все теги закэшируются и вы получите статичную страницу.

Во-втором случае, как видите, делается 2 лишних запроса, чтобы получить pagetitle страниц 1 и 2. Но несмотря на то, что указаны кэшируемые теги (без !), они будут выполнятся на каждый запрос.

Обе страницы вызываются из кэша. Тест проводился на тестовом сайте modstore.pro с настройками по-умолчанию. Я только добавил вторую страницу и создал для неё файловый шаблон на Fenom. Код на обоих страницах одинаковый и приведён выше. Код шаблона я не менял — тот, который идёт при установке MODX.

Соответственно, нагрузка на парсер выше, чем в первом случае — теперь он должен обрабатывать абсолютно все теги на каждый запрос. К счастью, pdoParser умеет отличать кэшируемые сниппеты от некэшируемых, за исключением файловых сниппетов. Они никогда не кэшируются. Но тем, кто практикует ТВшки с логикой (сниппеты, запросы к БД), не позавидуешь.

Аналогичная ситуация для Fenom тегов в обычном шаблоне. Fenom не умеет их кэшировать. Соответственно, если в MODX шаблон вставить код ниже, то результат будет такой же как и для Fenom шаблона.

<p><a href="{1 | url}">{1 | resource : 'pagetitle'}]</a></p>
<p><a href="{2 | url}">{2 | resource : 'pagetitle'}</a></p>

Те, кто погружался в Fenom, могут вспомнить, что у pdoTools есть возможность кэшировать чанки. Но если включить эту настройку и посмотреть полученный кэш, то будет видно, что теги Fenom так остаются динамическими, а теги MODX нераспарсенными. Т.е. под кэшем подразумевается скомпилированный шаблон, а не кэш полученного результата парсинга. Хоть Fenom делался по образу и подобию Smarty, он не умеет полностью превращать страницу в статику как это делают MODX и тот же Smarty. К слову у последнего есть разделение — скомпилированная копия шаблона и кэш (может быть полностью статичным как и у MODX). Хотя может быть у Fenom где-то есть скрытая фича, которая включает настоящий кэш, но я нигде её не нашёл.

А теперь вспомните тест Василия и попробуйте оценить, насколько возможность быстрого парсинга 1000 чанков компенсирует описанный оверхед. Конечно, точно ответить нельзя. Всё зависит от конкретного сайта. Но ясно, что применение Fenom несёт некоторые издержки, которые могут негативно сказаться на общем результате. Тем более, что вам может и не понадобится парсить 1000 чанков на странице, а при 100 чанках преимущество у тегов MODX.

Заключение

Всё сказанное выше я привёл не для того, чтобы выставить Fenom в плохом свете. Нет. Я лишь говорю о том, что нужно вдумчиво подходить к задаче и использовать соответствующие под текущую задачу инструменты. Там где можно получить профит от тегов MODX, использовать их. Где сложная логика или нагрузка допустимая — использовать Fenom.

Ну и напоследок могу привести пример с моим сайтом. Он небольшой, логики на страницах мало. Когда переводил его с MODX синтаксиса на Fenom никаких бустов я не получил. Осенью перевёл несколько страниц на Smarty из ZoomX. Прирост хоть и небольшой, но есть (страницы простые). Планировал зимой снять этот процесс на видео. Но устроился на работу и все планы полетели в пропасть. (

0   1814

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.