...

среда, 30 октября 2013 г.

[Из песочницы] Почему я отказался от использования Smarty

Краткиий экскурс в историю



Когда я пришел на работу в одну американскую контору (удаленно конечно. и было это году так в 2000), то вынужден был использовать стандарты, принятые в этой организации. И одним из них было использование своего шаблонизатора, который выглядел как простой html файл, в котором могут присутствовать специальные последовательности символов (обычно начинающиеся и заканчивающиеся на "##"), которые перед выдачей в броузер будут заменены на тексты или результаты работы других шаблонов. Также там был свое API для работы с такими шаблонами. Очень простое API. А так как я был в то время очень молод, то я принял на вооружение эти стандарты и стал использовать их в своей работе.



Вот пример работы с таким шаблоном:

$template = new Template();
$template->Load('NameTemplate.html');
$template->Replace('##TITLE##', 'Hello world!');
$template->Out();


Знакомство



Шли годы. И при реализации очередного проекта возникло требование: «В качестве шаблонизатора обязательно использование Smarty». Партия сказала: «Надо». Комсомол ответил: «Есть!». Так я и познакомился со Smarty. Он мне очень понравился. Я просто был вне себя от восторга. Любая задача которую мне надо было реализовать, могла быть реализована с его помощью. Иногда просто, иногда очень сложно, но можно. В общем, я стал использовать Smarty.
Прозрение



Прошло еще несколько лет. Не помню почему, но возникла задача найти простой для работы фреймворк на php. Я нашел их список и стал их тестировать для наших целей. Естественно одним из требований было: поддержка Smarty (и это было уже мое требование). При чтении документации одного из фреймворков (то ли Kohana, то ли CodeIgniter) я встретил фразу примерно такую: «Вы можете использовать Smarty, вот тут инструкция как его подключить и как с ним работать в нашем фреймворке, но мы считаем что нативный php проще, понятнее и быстрее ...». И я задумался. Стал сравнивать реализации на нативном php и Smarty.

Проще? Конечно, ведь php мы уже знаем.

Понятнее? Конечно, ведь php мы уже понимаем.

Быстрее? Конечно, ведь код на Smarty будет транслироваться в код на php (и как минимум быстрее он быть не может, а медленне запросто).

Безопаснее? Я думаю да. Хотя тут можно поспорить. Дырок можно наделать где угодно.


Cмотрите сами:



{$foo} против <?=$foo?>



{assign var=foo value='baa'} против <?php $foo = 'baa'; ?>



{include file='header.tpl'} - реализация этого на php зависит от разных факторов от <?php include 'header.php'; ?> до более сложных вариантов (все зависит от фреймворка)



{assign var="foo" value="`$foo+$bar`"} // помню, всегда искал это в документации.

<?php
$foo += $bar;
?>


Примеры условий и циклов приводить не буду — занимают много места и выглядят примерно одинаково.


Еще помню как на Smarty делал реализацию рекурсивного обхода дерева, один из вариантов это создание шаблона и вызов этого шаблона внутри себя. На php это выглядит так:



<?php
function draw_tree($tree){
foreach ($tree as $node)
{
echo '<option ...>'.$node['name'].'</option>';
draw_tree($node['childs']);
}
}
?>


Я долго пытался себя убедить, что Smarty удобнее для дизайнеров. Но они на него так и не пришли (по разным причинам). И в итоге я, как программист, вынужден был писать скрипты для скриптового языка. В добавок некоторые версии Smarty оказались с уязвимостью и мне, то и дело, приходилось возвращаться к старым проектам, чтобы обновлять библиотеки и делать проверки на совместимость.


PS. Smarty не использую уже года 2-3, и потому текущее состояние дел мне оценить сложно, но думаю дела обстоят не лучше и не хуже чем было раньше.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



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

Отправить комментарий