вторник, 27 мая 2008 г.

О плохих шаблонизаторах

Для меня стало неприятным открытием что многие до сих пор используют для шаблонизации таких уродцев как XTemplate, либо пишут свой такой же велосипед с квадратными колёсами.
И так, давайте рассмотрим принципы их работы.
Первоочередной задачей шаблонизации является разделение бизнес логики и логики представления. Говоря человеческим языком, для того чтобы изменить отображение страницы нужно изменить лишь часть, отвечающую за отображение, так называемый шаблон.
Что такое шаблон. Обычно это html код со вставкой специальных элементов разметки, которые позволяют добавлять динамические данные.
На первом этапе создаётся массив данных, которые нужно передать в шаблон, а затем выводится сам шаблон и делаются замены спец вставок, на данные полученные в первом этапе.
Для обнаружения и подмены вставок, обычно используются два способа - функция str_replace и регулярные выражения. Первый вариант довольно шустрый, но имеет рад ограничений, второй из-за использования регулярок довольно трудоёмок.
И так, что происходит внутри. Берётся файл с шаблоном, загружается в память, затем обрабатывается с помощью строковых функций и делаются замены. Парсинг целого шаблона штука довольно трудоёмкая, а главное бесполезная. У нас для шаблонов уже есть РНР, который позволяет писать этакий код:

<h1><?=$title?></h1>
<ul>
<? foreach $items AS $item { ?>
<li><?=$item?></li>
<? } ?>
</ul>

А теперь представьте шаблон  пару сотен кода, в котором должны делаться замены, которых можно было легко избежать, подумайте, насколько упадёт производительно?
Для чего же тогда написана такая громадная библиотека как smarty и его аналоги, если уже есть готовые средства.
И так, рассмотрим второй подвид шаблонизаторов. Смартиподобные шаблонизаторы имеет ещё одну прослойку - компиляция. То есть, как и у первых, берётся шаблон, но не делается замена вставка - значение переменной, а вставка - переменная, после это всё записывается в файловую систему, чтобы при повторном обращении не делать лишних преобразований. В итоге, мы получает php шаблон. Но скорость даже подобных шаблонизаторов хуже чем, ежели бы обошлись без них.
И на кой нам это?
Первое преимущество - безопасность. Убрав из шаблонов РНР мы делаем шаблоны безвредными.
Второе тесно связано с первым. Теперь изменением дизайна могут заниматься не программисты, нужно лишь не нарушать разметку.
Третье - автоматизация. Люди ленивы, а жизнь коротка. поятому нужно стараться не делать дважды отдно и тоже. Допустим в смарти есть элемент html_options, который позволяет создать список единого выбора, есть escape, который поваляет обезопасить вывод, избавившись от потенциально опасных тегов.
Четвёртое..... А ну его, додумайте сами.
Результаты.
Шаблонизания на основе компилируемых шаблонов, помогает сэкономить кучу системных ресурсов, по сравнению с дермошаблонизаторами, при этом расширяемость позволяет выходить за рамки логики отображения, но хорошо это или плохо, решать каждому для себя. Пользуйтесь качественным кодом.
P.S. Некоторые умеют летать, а другие сё ещё "залетают".© Кто-то умный.

Комментариев нет: