Pull to refresh

Обзор шаблонизатора Quicky: Производительность и Гибкость

PHP *
Quicky — hi-end шаблонизатор, написанный на PHP отличающийся гибкой функциональностью, и в то же время, высокой производительностью. За основу взят синтаксис и функционал Smarty.


содержание:
переход со Смарти, на Quicky
— — чем Quicky лучше Smarty?
Quicky быстрее PHP-native?
Quicky темная сторона силы.
Комьюнити Quicky. (теперь все тут http://code.google.com/p/quicky/)
Богатые возможности Quicky.
Вместо заключения. Личное мнение.

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

Я работал на Смарти, как мне попробовать Quicky?


Квики сделан так, что переход на него осуществить предельно просто, потому что он поддерживает детально синтаксис смарти вплоть до мелочей, но генерирует намного более чистый (в том числе и читабельней) и быстрый код, кстати, замечу, что и генерирует код он быстрее (зависимости от сложности шаблона).

итак, чтобы попробовать вам нужно:
1. скопировать последний дистрибутив (http://code.google.com/p/quicky/). Здесь всегда лежит последняя стабильная версия.
2. инструкция quicky-tpl.net/ru/doc#p2
заменяем строки вида
require('Smarty.class.php');
$tpl = new Smarty();

на

require_once 'Quicky.class.php';
$tpl = new Quicky;
$tpl->compiler_prefs['interpritate_varname_params'] = true;
об этом параметре можно почитать здесь: http://quicky-tpl.net/ru/forum,viewtopic,7/

В подавляющем большенстве случаев этого достаточно. Cписок конфигурационных параметров / существующих функций найдете здесь: http://quicky-tpl.net/ru/doc#p3.2

если проблемы с загрузкой плагинов, то ищем ответ здесь:
http://quicky-tpl.net/ru/ideology

основное принципиальное отличие:
Все шаблоны имеют общую область видимости.

это так же может стать причиной не совместимости вашего проекта с квики, но это сделано из принципиальных соображений, а не случайно.

чем Quicky лучше Smarty?


первое: у Квики намного более богатый синтаксис. Перечислю наиболее употребительные в порядке личного предпочтения.
— Для того чтобы предотвратить вывод результата выполнения Quicky-тега на экран нужно дописать в начале '?', например: {?$x = 2+2}.
Теперь вы сможете забыть о {math...}, квики позволит вам писать элементарные и не только выражения прямо в выводе: {$a+$b}, {?$c=sqrt($b)}
— В закрывающем теге название можно не указывать, то бишь допустимы записи
{BLOCK}...{/} ({if $a}...{/})

— Есть хорошо зарекомендовавшие себя блоки {switch}, {while}, {for} и другие…
— Вывод результата работы допустимых функций (допустимые — это те, которые не меняют состояния внешних интерфесов), например: {str_repeat("-=", 10)}
— Использование констант и выражений в блоках:{foreach from=array('One','Two','Three') key=«i» item=«text»}
— Магические константы для доступа к свойствам блоков. То бишь, например:
{foreach name=my from=array('One','Two','Three') key="i" item="text"}
    <u>{iteration}</u>: {$text}<br />
{/foreach}

Нормальная поддержка объектов, то бишь можно вызвать нечто вроде: {$obj->method1()->property->method()}
второе: Квики быстрее.
— Как я уже сказал, у квики намного более продвинутый компилятор, который не генерирует кучу мусора, а так же сам по себе работает быстрее. читаем http://quicky-tpl.net/ru/ideology
— Блочные переменные вроде first/last/index/index_prev/index_next не хранятся в шаблоне образуя гору кода, а вычисляются из элементарных (т.е. из i и size).
— {capture} по умолчанию не использует ob-функции, а лишь указывает в компиляторе запись в переменную вместо echo.

третье: Хелперы (функции шаблона).
Helper/function. в шаблонах можно создавать хелперы, т.е. функции доступные внутри шаблона.
Они имеют общую с шаблонами область видимости переменных.
Пример:
{helper myhelper($a,$b,$c)}
{?$d = $b*$b-4*$a*$c}
{return array((-$b+sqrt($d))/(2*$a),(-$b-sqrt($d))/(2*$a))}
{/helper}


Quicky быстрее PHP-native?


Невероятно, но факт: квики может быть быстрее.
Секрет кроется в операторах компилятора:
Операторы компилятора выполняются только при компиляции шаблона, они воздействуют на код скомпилированного шаблона, т.е. их результат становится статическим.

примеры:
{_foreach ..}{/}
{_if ..}{/}
{_include ..}
в сутках  {$daySeconds=(_60*60*24)} секунд
{?$compileTime = (_$Quicky.now)}

Во всех примерах в конечный шаблон падут результаты работы этих операторов, тоесть фактически _ перед выражением означает eval() при компиляции

Quicky темная строна силы.


Квики очень мощный и богатый инструмент, при неумелом использовании он может «убить» ваш проект (хотя как верно замечено извратиться всегда можно). Вы сами выбираете для себя степень ответственности перед вашими коллегами — это цена за невероятную гибкость. Если вы консервативны, то квики даст вам классический инструментарий на принципиально новом уровне качества. Если вы амбициозны, то Квиви даст вам джедайский меч, выбирайте цвет сами =).

Комьюнити Quicky.


На данный момент квики не очень популярен и его сообщество мало, офицально оно существует здесь:
http://quicky-tpl.net/
слабая информационная освещенность квики — это единственный, на мой взгляд, существенный недостаток, с которым я попробовал частично бороться.
Автор Квики — это один человек, а не команда разработчиков, скрывающаяся под псевдонимом WP.
Скорость релизов пряма пропорциональна вашим запросам, сам на практике убедился, что автор качественно решает проблемы с багами (если такие находятся): достаточно запостить баг-репорт и в скорости получите фикс.
Проекту квики около 2-х лет, он достаточно молодой, но давно прошел стадию альфа-тестирования. Версии нумеруются так, что 3-й порядок говорит о не принципиальных изменениях, а второй порядок существеных, 4-й порядок обычно баг-фиксы. Текущая версия: 0.4.6.1

Богатые возможности Quicky.


вообще это тема для отдельной статьи, да и опыта моего работы с ними маловато, поэтому ограничусь краткими описаниями (в конце концов это же обзорная статья)
— поддержка синтаксиса Blitz
Quicky_form — это механизм взаимодействия API и элементов формы, позволяющий верстать динамические формы ©
вообще узнать о них поподробней можно глянув на примеры, они в папочке /quicky/_test дистрибутива.

Вместо заключения. Личное мнение.


Как вы, наверное, заметили моя статья сквозит позитивом, и это правда, Квики мне очень понравился. Я смотрел MACRO, долгое время пользовался Смарти, писал проект и на ZFR, жил на PHP-native но мне нравится синтаксис смарти и гибкость, которую дает квики. Не могу сказать что это лучшее из лучших, просто потому как не сделал еще относительно «большого» проекта на квики, но уверен, что это может оказаться правдой.

UPD:
1. для тех, кто пишет что-то вроде: «да зачем вообще нужны шаблонизаторы!» прошу проследовать по ссылке:
habrahabr.ru/blogs/php/27999 ну или погуглить, по запросу «зачем нужны шаблонизаторы!»
2. минусы — это естественное выражение вашего отношения.
Tags:
Hubs:
Total votes 89: ↑70 and ↓19 +51
Views 4.6K
Comments Comments 239