Быстродействие. Избавляемся от Smarty

Смарти – известный шаблонизатор. Простой и удобный по своей сути. Шаблонизатор нужен для отображения содержимого каждой страницы сайта. Шаблонизатор удобен для разделения части верстки от скриптовой части сайта. Первой пользуются в основном верстальщики, а второй – разработчики. О том, почему и зачем избавляться от смарти – рассказано ниже…

Когда вышел 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 универсален, быстр, постоянен, эффективен, оптимален.

После избавления – ваши сайты грузятся много быстрее и это заметно. Поисковики хорошо относятся к сайтам, которые быстро грузятся. Коммерческие сайты, которые быстро грузятся – получают больше продаж. Успехов в мире интернета.  И успешного запуска новых сайтов.

Больше материалов выкладываю на своем Дзен канале

  • Автор: kosmom
  • Рейтинг: 0
  • Просмотров: 1629
  • Комментариев: 1
  • Создан: 12.11.2012 11:34

Комментарии (1)

08.03.2013 19:38
Гость

+++100500

Ваши предложения и пожелания пишите на pro@kosmom.ru

Теги

ajax axios backup bootstrap core framework eloquent excel home project html ios javascript keep-alive kpi laravel legacy mvp orm php rip scroll solid timestamp undefined vue vuetify watch безопасность биометрический паспорт ваша любаша для путешествий загран на 10 лет загран паспорт загранпаспорт нового образца зимние книги как заполнить анкеты кеширование книги на новый год логирование мцф недвижимость новогодние книги образец заполнения антеты паспорт для путешествий паспорт нового поколения печать продукт проектирование прокси разработка ремонт ремонт в апартаментах ремонт нежилого помещения самокат сдача сколько стоил ремонт апартаментов спорт стандарты таблица финансы хостинг цена ремонта что почитать зимой юзабилити

Случайный пост

11.06.2015 17:58
Книги за март 2015 года