Доброго всем дня!
Интересует мнение большинства, какие шаблоны лучше использовать в многоцелевой CMS? Что лучше: php+html, smarty, twig...?
Хотелось бы получить максимум отзывов (без "религиозных" споров) просто по делу, нравится ... потому что ...
Заранее спасибо!
Ответ
Многое зависит от того, какие требований к шаблонизатору. Так например, одни шаблонизаторы могут быть более гибкими, вторые более быстрыми, третьи лучше отделяют логику от представления.
Из тех шаблонизаторов, с которыми мне приходилось работать самому, я бы мог выделить следующие:
Шаблоны на "чистом" php, будем называть их php mess
Возможности. Тут все понятно. Все есть в вашем проекте, доступно и здесь "из коробки".
Скорость. Так же очевидно, что скорость будет ограничиваться разве что кривизной шаблонов.
Расширяемость. См. возможности.
Юзабилити. А вот это пункт сводит на нет все преимущества предыдущих пунктов. Нет никакой разделяемости логики от представлений. Конструкции типа
$val) : ?php>
как правило неизбежны и быстро превращают шаблон в жутчайшее месиво говнокода.
Отсутствие каких-либо песочниц или ограничений на выполняемый код делают его настоящим генератором багов.
Крайне не рекомендовал бы использовать этот подход ни в каких проектах сложнее Hello, World
Smarty - старейший и хорошо всем известный шаблонизатор.
Возможности. Имеются функции, модификаторы, ветвления, инклюды. Компилирует шаблоны в php mess. В общем, стандартный набор шаблонизатора. Ничего особо примечательного нету. Песочницы нету.
Скорость. Написан на PHP, шаблоны компилирует в php mess. Но из-за большего overhead на обслуживание и выполнение шаблонов, достаточно медлителен. Хотя, начиная с версии 3 стал пошустрее, но все равно достаточно далек от идеала.
Расширяемость. Можно создавать свои функции и модификаторы, которые будут выполняться в runtime. Собственно, все.
Юзабилити. Хорошая документация. Синтаксис, на мой взгляд, хоть и не очень лаконичен, но понятен любому грамотному верстальщику. Однако, наличие тега '{php}' и бесконтрольное добавление функций может легко превратить шаблон в месиво, похлеще чем встречается в php mess. Интегрируется со многими IDE.
Рекомендовал бы его только в случае, когда есть верстальщики уже работавшие с ним и не желающие что-либо переучивать.
Twig - новомодный шаблонизатор. Во многом схож с питоновским шаблонизатором Django
Возможности. В чем-то схожи со Smarty. Те же модификаторы, циклы, ветвления, инкюды (но, к счастью, нету тега {php} или аналогов). Помимо этого предоставляет возможности блочной шаблонизации, наследование шаблонов, макросы и прочие мелкие полезности.
Так же есть возможность настраивать лексемы языковых конструкций, что может упростить миграцию шаблонов других шаблонизаторов.
Имеется песочница для безопасного выполнения шаблонов в изолированном окружении.
Скорость. Сам Twig написан на чистом php. Компилирует шаблоны в php классы с последующим многократном использованием оных. Из коробки, в некоторых местах, проигрывает по скорости даже Smarty 3. Однако с использованием, идущего в комплекте расширения на C (которое содержит одну единственную функцию :)) можно получить вполне приемлемую производительность.
Расширяемость. Тут Twig абсолютный лидер. Он позволяет все: от расширения языковых конструкций до создания своего компилятора шаблонов.
Одной из примечательных особенностей можно отметить то, что можно писать расширения, которые будут работать на уровне компиляции. К примеру, не сложно написать расширение, удаляющее лишние пробелы из литералов один раз при компиляции, а не в runtime из всех переменных подряд. Или же можно написать расширение которое будет компилировать тот-же самый шаблон в чистый javascript.
Юзабилити. Удобный лаконичный синтаксис. Некоторые конструкции, явно, позаимствованы из питона. Так же как и Smarty интегрируется со многими IDE.
Рекомендовал бы для всех проектов не слишком критичных к производительности или требующих очень тесную интеграцию шаблонизатора с основным проектом.
Blitz - безумно быстрый шаблонизатор от русского разработчика. Написан на C
Возможности. Блоки, переменные, примитивная конструкция IF и пользовательские функции. Все.
Скорость. Это наверное единственный из всех используемых мной шаблонизаторов, который в некоторых случаях (как правило для сложных шаблонов с большим количеством блоков) по скорости превосходит даже php mess! Более быстрого шаблонизатора я еще не встречал.
Расширяемость. Единственная возможность расширения - это пользовательские функции. Однако в качестве параметров функций могут выступать только переменные текущего контекста или скалярные литералы, что делает их несколько ограниченными в возможностях.
Юзабилити. Синтаксис в виде HTML комментариев, плюс отсутствие всевозможных циклов, сложных ветвлений и т.п делает, на мой взгляд, шаблоны очень удобными для верстки. Ничего лишнего, в браузере сразу видно как будут выглядеть все блоки шаблона. Верстальщику не нужно учить никаких сложных конструкций.
Для разработчика же все в точности до наоборот. В связи со спецификой шаблонизатора и ограниченной функциональности нужно подготавливать данные с заранее определенной структурой (см. раздел
15. Nested iterations) или же вводить дополнительную прослойку, отвечающую за логику отображения.
Рекомендовал бы для любых highload проектов.
Комментариев нет:
Отправить комментарий