Шаблонизаторы

Icon

В рамках планирования одного очень большого проекта моя скромная персона выбирала необходимый набор тулсетов, для его реализации. Естественно, первым стоял вопрос о выборе «шаблонизатора» для проектируемой системы. С одной стороны, я всем всегда советовал Smarty, но в проекте такого размаха не мог позволить себе рисковать, а потому провёл сравнительный анализ ряда существующих решений.

Для сравнения «скорости» шиблонизаторов была поставлена примитивная итеративная задача по генерации таблицы из массива в 10 000 записей. Далее задача несколько усложнялась, требуя нумерации строк в таблице и итерации их цветов. Все тестируемые системы прогонялись по десять раз по данной задаче и бралось среднее значение по времени исполнения скрипта и необходимой для этого памяти.

В тесте участвовали:

Результаты по скорости исполнения и ресурсоёмкости, собственно, меня удивили не сильно, ибо примерно таких значений я и ожидал. Правда, был слегка поражён скоростью php_templates, а потому в очередной раз проникаюсь глубоким уважением к профессионализму [info]demiurg. Сводная таблица приведена ниже:

[image]

Но скорость — это, увы, в наше время уже давно не показатель, ибо купить более навороченной техники всегда дешевле, чем оплачивать рабочее время разработчиков. По-этому первой прерогативой, конечно, в анализе подобного рода должна быть «простота использования системы». Более того, из всех опробованных решений лишь Smarty может похвастаться полным соответствием концепту трехуровневой архитектуры приложений.

Но всё это не суть, ибо для каждой задачи есть своё «оптимальное» решение, и нельзя громко заявлять о том, что нет ничего лучше какой-либо фишки, ибо это будет очень субъективной точкой зрения.

Например в моём случае, мне необходимы такие фишки как:

  • Кеш 
  • Логические выражения в шаблонах
  • Отделение «языковых» констант от дизайна
  • Возможность запрашивать данные прямо из шаблона не трогая при этом код 
  • Безопасность

А потому естественным выбором был и остался Smarty, увы, ничего более подходящего под мои запросы я не нашёл. Конечно, товарищ Смирнов сейчас не упустит возможности, чтобы запустить в меня камень. Между прочим, я вполне солидарен с его представлением о «шаблонах», а потому и тестировал SimpleT, что есть ни что иное, нежели простенький объект для обработки php файлов “as is”. Однако, очевидный минус подобного подхода — в нарушении безопасности. Нельзя давать сторонним людям редактировать шаблоны, ибо они получают полный доступ к коду, а это не есть гут.

Более того, «метод Смирнова», оказывается, практически в десять раз медленнее php_templates (я сам офигел). Так что для небольших и средних проектов, настоятельно рекомендую именно php_templates. Для распределённых систем, мои рекомендации относительно Smarty остаются неизменными. Прочие решения особого энтузиазма у меня, увы, не вызвали, все они просто похожи на снова и снова изобретённое колесо.

Вот, собственно, и всё. А тем, кто знаком с английским языком и хочет поковыряться в моих «исследованиях», я предлагаю полистать полный отчёт.

Top

Слова: coding, internet, php

Комментарии Отключены

huNTer

Хотите сказать что классические конструкции типа

is bla set =

not set

работают медленнее классов Smarty ?

хм... сомнительно

28.12.2004 // 06:20 [ ссылка ]

Ответ от Автора

я на это нигде в текте не намекаю... скорее наоборот, чем МЕНЬШЕ время обработки шаблона, тем лучше, а, соответственно, и график будет ниже )

28.12.2004 // 13:03 [ ссылка ]

Weasel

Мне остался непонятен вот какой вопрос: В каких попугаях измеряется скорость на графике?

Судя по нему, самая большая скорость (аж 14.7 попугаев в секунду) у Fast Template, а о скорости php_templates можно говорить только с иронией...

Если же php_templates самый быстрый, то тогда на графике не "Скорость", а "Среднее время обработки страницы" или что-то в этом духе.

28.12.2004 // 07:41 [ ссылка ]

Ответ от Автора

дык всё просто, 10 000 итераций при простой построени таблицы, время, соответственно, в секундах, необходимх на всю операцию.

php_templates просто лапка, но тут это ясно, ибо это скомпилированый модуль пхп, а не интерпритируемый код.

А так да, согласен, легенда может ввести в ступор, если не прочитать полного отчёта на английском.

28.12.2004 // 13:02 [ ссылка ]

spectator

Вот ты пишешь, что рекомендуешь php_templates для простых небольших проектов. А ведь это же сompiled PHP module, то есть хрен кто даст небольшим проектам его поставить. Обычно так бывает :)

29.12.2004 // 08:24 [ ссылка ]

Ответ от Автора

Не надо быть гением, чтобы скомпилировать на мастерхосте свой ПХП =))

29.12.2004 // 09:29 [ ссылка ]

spectator

...который будет работать как CGI, то есть медленней. В чем тогда смысл? :)

29.12.2004 // 11:46 [ ссылка ]

Ответ от Автора

надо потестить :) вечером может руки дойдут попробовать

29.12.2004 // 12:13 [ ссылка ]

Oda Noboonaga

hostpro.com.ua - меня удивило кстати что пхп_темплейтс присутсвует... установлен и работает. лень код переписывать со смарти =).

05.01.2005 // 15:22 [ ссылка ]

Ответ от Автора

смарти, бесспорно, удобнее )

05.01.2005 // 17:02 [ ссылка ]

Oda Noboonaga

Разумеется. кто ж спорит???

просто - єто так сказать ответ товарищу Дмитрию. и гением біть не надо что б біл пхпх_темплейтс =).

06.01.2005 // 09:15 [ ссылка ]

Yuriy

Интересные дискуссии по теме вот тут (если кто не читал еще):

http://www.sitepoint.com/forums/showthread.php?t=123769&page=4&pp=25

http://phppatterns.com/index.php/article/articleview/4/1/1/ (особенно комментарии)

http://wact.sourceforge.net/ - много дельных мыслей

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

19.01.2005 // 11:10 [ ссылка ]

Ответ от Автора

правильная модель всего у единиц =)

19.01.2005 // 12:52 [ ссылка ]