Смарти – известный шаблонизатор. Простой и удобный по своей сути. Шаблонизатор нужен для отображения содержимого каждой страницы сайта. Шаблонизатор удобен для разделения части верстки от скриптовой части сайта. Первой пользуются в основном верстальщики, а второй – разработчики. О том, почему и зачем избавляться от смарти – рассказано ниже…
Когда вышел Smarty 3 – некоторые успели пошутить, что Smarty 4 – будет отсутствие смарти. Такой посыл появился, т.к. некоторые операторы стали очень похожи на операторы на чистом PHP, например foreach превратился из
{foreach from=var item=item key=key name=name}…{/foreach}
Превратился в
{foreach $var as $item}…{$item@key}…{/foreach}
Очень похожий на foreach в PHP
<?foreach ($var as $itemkey=>$item){?>…<?}?>
Здесь напрашивается главный вопрос: если там сейчас и так все сходно – в чем смысл содержать смарти как таковой? Верстальщик с базовыми знаниями PHP сможет легко понять о чем речь. Также как и с базовым знаниями смарти.
Как работает сматри? Вы создаете каталог с шаблонами, создаете каталог с компилированными шаблонами. Создаете шаблоны. В коде – передаете смарти нужные переменные и даете команду – вывести шаблон.
В этот момент – сматри проверяет, не изменился ли шаблон с момента последнего обращения, проверяет наличие компилированной версии. При необходимости – компилирует шаблон в тот самый вид, похожий на PHP, подставляет все переменные и выводит результат на экран.
Смарти компилирует шаблоны достаточно редко, что дает хороший прирост к производительности, думаете Вы. Но спрашивается – нафига вообще что-то компилировать? Создавайте готовые шаблоны в виде PHP и все. Не нужно проверять наличие файла, время изменения файла. Не нужно компилировать (а компиляция большого шаблона требует много памяти от сервера). Не нужно содержать кучу мусорных компилированных файлов.
Вы думаете, что смарти в шаблон сразу встраивает все дополнительные функции и работают они быстро. Ни фига. Все модификации |default
|replace
и т.д. расположены в файлах – каждый раз подгружаются и каждый раз обрабатываются. При том не всегда оптимальным путем. Посмотрите исходные коды модификаций и вам все станет понятно.
Смарти слишком избыточен. В нем постоянно встречаются и отлаживаются глюки (значит они есть). И вам придется изредка нарываться, что вроде бы все сделали, а вот он где-то не передался, или модификатор сработал не правильно. Когда формируется foreach – в смарти определяется первый и последний момент итерации, даже если он не нужен и можно было бы сэкономить на ресурсах. Вам постоянно периодически придется обновлять смарти в надежде, что при обновлении не всплывут какие-либо глюки. В надежде, что не придется менять все шаблоны и удалять компилированные версии, т.к. они уже не читаются
Не все IDE редакторы поддерживают синтаксис смарти и не все будут полезны в плане обнаружения вложенности IF FOREACH и других элементов. Родной PHP известен всем редакторам. Каждый Вам скажет – где этот цикл начался и где кончится.
Больше не придется ломать голову над выяснением в какой строке шаблона произошла ошибка, PHP подсказывает в удобном виде, даже силами IDE.
Исполнительный файл смарти версии 3 без подгружаемый файлов занимает 45Кб. Который периодически подтягивает за собой файлов на 2Мб со всеми комментариями и пояснениями. Инклуд, парсинг и проверка 50Кб уже использует ресурсы процессора на 0.003 секунды. Проверки на существование файла отнимают еще ресурсы жесткого диска и процессора.
Защищайте прямой доступ к шаблонам при помощи .htaccess.
Order allow,deny Deny from all
Смарти может быть полезен, как хорошая практика. Разделяйте шаблоны от исполняемых файлов. Используйте конструкции для вывода текста с закрытым PHP тегом, вместо echo‘’.’’; Из смарти можно достать и положить в свою библиотеку некоторые действительно полезные функции mailto, truncate. От них не избавиться, но они могут лежать в одном небольшом компактном файле.
Смарти незаменим, если вы используете шаблоны и подшаблоны как ООП, с вызовом друг друга. Но если вы так делаете – значит вам безразлично быстродействие и эта статья не для вас.
Если Вы используете кеширование на уровне смарти – его также можно воссоздать на голом PHP и в одной из дальнейших статей мы обсудим данный вопрос.
Для вывода – просто используйте инклуд файла. Для вывода шаблона в переменную – можно использовать
ob_start(); include(); $var=ob_content(); $ob_flush();
Статья также относится и к другим шаблонизаторам. Нет смысла использовать что-либо, когда голый PHP универсален, быстр, постоянен, эффективен, оптимален.
После избавления – ваши сайты грузятся много быстрее и это заметно. Поисковики хорошо относятся к сайтам, которые быстро грузятся. Коммерческие сайты, которые быстро грузятся – получают больше продаж. Успехов в мире интернета. И успешного запуска новых сайтов.
Гость
+++100500