14
января
2008

Blitz Templates

Сегодняшний информационный повод — открытие шаблонизатора Blitz Templates, который ранее ускользал от моего внимания. Из всех парсеров темплейтов, с которыми я имел дело, это первый, реализованный в виде модуля интерпретатора PHP. Как не сложно догадаться, это радикально-положительным образом сказывается на производительности системы, но вначале я бы хотел высказаться о другом его свойстве.

Как известно, задачей любого парсера темплейтов является полумифическое отделение кода (и данных) от оформления страниц. Я говорю полумифического, т.к. в действительности ни один развитый шаблонизатор не может похвастаться реализованной в полной мере такой возможностью. Когда требования к функциональности шаблонов возрастают, их синтаксис усложняется, постепенно перерастая в специализированный язык. Показательный пример тому — Smarty и многие другие распространенные движки темплейтов. Строго говоря, сам PHP можно отнести к категории очень навороченного генератора страниц.

В итоге, одним из основных критериев при выборе шаблонизатора становится не качество (или степень) отделения кода от оформления, а скорее читаемость этого кода — достаточно субъективная характеристика, которая сильно зависит не только от шаблонизатора, но и от стиля кодинга. Показательный пример: XSLT является одним из наиболее идеологически-грамотных шаблонизаторов, тем не менее он сейчас пользуется не самой большой популярностью. Одна из причин тому — очень навороченный синтаксис.

В контексте сказанного выше, мне понравилась идеология, заложенная в синтаксис Blitz. цитата из официального источника:

Blitz не поддерживает по принципиальным соображениям сложные выражения: {{if(if($foo, 0, 1), ’bar’, ’foobar’)}} Данный код работать не будет. Не надо превращать код в спагетти.

И это очень правильный подход. Гибкие возможности строить сложные синтаксические конструкции — не всегда хорошо. Часто это служит причиной возникновения настолько запутанного кода, что в него не то что сторонний разработкич побоится залезть, но и сам автор, через пару месяцев после написания, предпочтет полную переработку корректировке деталей.

Упрощение синтаксиса хорошо еще и потому, что у кода шаблонов есть своя специфика: зачастую в темплейтах осознанно не делают форматирования (чтобы не портить форматирование генерируемого HTML и/или не утяжелять его излишним количеством пробельных символов), кроме того в текстовых редакторах обычно нет синтаксической подсветки кода темплейтов, которая облегчила бы работу (исключения — XSLT и, опять же, PHP).

Возвращаясь к вопросу производительности: Blitz работает быстрее, чем шаблоны, собираемые из отдельных PHP файлов (include-ами), но, по понятным причинам, медленее сплошного PHP кода. Учитывая, что нежелание использовать темплейтов на базе PHP — одна из самых важных причин использования сторонних шаблонизаторов вообще, можно считать, что Blitz фактически является лидером по скорости среди других систем своего класса.

Отдельно стоит упомянуть процесс тестирования, точнее обстоятельный подход, с котором он выполнен и описан на сайте разработчика. Неоднократно видел, как производительность шаблонизаторов, фреймворков и CMS измеряют на примерах уровня сложности «Hello world», а потом кричат «Сенсация! PHP работает быстрее кода на C++!». Что касается Blitz — тесты проводились в условиях, близких к боевым, и полностью обоснованы.

Вывод: на Blitz стоит обратить пристальное внимание при проектировании высокопроизводительных CMS для сайтов, работающих на выделенных серверах. В тех случаях, когда серьезных требований к производительности нет, его использование, к сожалению, будет не всегда оправдано экономически (пользовательские модули PHP — вещь не для shared хостинга).

Ссылки по теме

  • Blitz Templates — официальная страница разработки с описанием синтаксиса и результатами сравнительных тестов.
  • Другие шаблонизаторы: Smarty, Template Lite (облегченная и более быстрая версия Smarty), PEAR::HTML_Template_* (средства PEAR для генерации страниц по шаблонам).

Комментарии к заметке «Blitz Templates»

# stels: (14 января, 2011 @ 00:22)

я тут попробовал поставить Blitz на Денвер. В ини прописал-extension = php_blitz.dll, в каталог ext длку поставил, перезагрузил а реакции никакой (( а реально уже много различных ресурсов пересмотрел и считаю что blitz это тот шаблонизатором что надо, и с хтмл действительно не надо делать макароны всякими смарти, тогда уже продуктивнее будет писать все вместе пхп и хтмл в перемешку)) сам пользовался Xtemplate (просто без затей и код нормально выглядит), но решил найти нечто более продуктивнее.

Написать комментарий

Можно использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> .