24 ноября 2008 в 02:22

Обзор шаблонизатора 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. минусы — это естественное выражение вашего отношения.
Александр Шульман @developer
карма
39,0
рейтинг 0,0
Похожие публикации
Самое читаемое Разработка

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

  • +4
    Заинтересованность шаблонизаторами на Хабре набирает обороты =)
    • 0
      появился спрос — вот и пишем
  • +1
    >Quicky быстрее PHP-native?
    >Невероятно, но факт: квики может быть быстрее.
    >Во всех примерах в конечный шаблон падут результаты работы этих операторов, тоесть фактически _ перед выражением означает eval() при компиляции

    Если eval() то это уже точно не быстрее… Как минимум так же… но не быстрее =))
    • 0
      eval() вызывается только при компиляции шаблона — поэтому и быстрее :)
    • 0
      поясню еще раз:
      возможно у вас в шаблоне есть какое-либо выражение которое при повтороной генерации вывода будет давать вточности такое же значение, тогда вам достаточно расчитать его один раз при компиляции — на это указывает "_" перед выражением.
  • +2
    Ой…
    Самый быстрый шаблонизатор — это PHP-native, зачем же говорить, что некий шаблонизатор с кэшированием в статический HTML быстрее PHP-native? Давайте же и сравнивать PHP-native шаблонизатор + кэширование и Х-шаблонизатор + кэширование
    • +1
      И удобный ;)
      Это опять конечно же холивар. Кому как удобно пусть так и работает, конечно же. Но зачем юзеру опять «учить» новый шаблонизатор, фактически «язык» учить?
      Один раз выучил основы php (foreach и как выводить данные — этого достаточно) — и хватит с головой и на долго.
      Просто надо сразу делать правильную архитектуру проекта. А не извращаться потом в шаблонизаторах.
      • +4
        Я за :)

        Почему я не люблю смарти, и уже не нравится квики:

        Создатели боролись-боролись с разделением и повышением гибкости что поборолись до того с чем боролись.
        1) Что бы научится что то вывести на экран нужно кучу геморроя пройти.
        2) разделяли-разделяли да переразделили, теперь не в PHP выводим HTML, а в HTML — PHP, ы прикольно…
        3) на основе пункта 2 мы так и не избавились от зависимости дизайнера от программиста и наоборот, а еще и увеличили…

        Сугубо мое мнение, сильно не пинайте, просто накипело ;)
      • 0
        >Один раз выучил основы

        Это подход, недостойный программиста.
        • 0
          Это не для программиста :))
          Это для дизайнера, простого пользователя.
          • –1
            А для дизайнра — PHP — это уже оверкилл :)
            • 0
              Я же и написал — основы.
              При грамотной реализации архитектуры всего-то знать то надо будет, как работает foreach и if(), а также echo или print.
              C этим справится не только дизайнер, но и любой школьник.
              • –1
                Ага, и про htmplscecialchars() расскажете, и про массивы, объекты и прочая? Верстальщика то не жалко?

                А Quicky — да слоднее, но не для чайников. Завто есть свои преимущества.
                • –1
                  Хорош халиварить.
                  При чем здесь htmplscecialchars()? Все «вопросы» безопастности (и не только) вы должны решить до «вывода» контента.
                  Если вы осталвляете верстальшику htmplscecialchars то у вас или «никакая» архитектура или проблемы с безопастностью.
                  На view — должен передаваться только один массив «подготовленных» данных и всё, если не так то у вас проблема с MVC.
                  • –1
                    > Все «вопросы» безопастности (и не только) вы должны решить до «вывода» контента.

                    А вот и нет) Этим должен заниматься шблонизатор, делать мне больше нечего, по всем данным делать htmlspecialchars()

                    > На view — должен передаваться только один массив «подготовленных» данных и всё, если не так то у вас проблема с MVC.

                    Мда… мне на это даже сказать нечего… где же по вашему должны обрабатываться эти данные (тот самый specialchars(), форматирование цифр, даты, склонение слов (типа «3 комментария»)), ответь-те ка (вопрос с подвохом)))?
                    • –1
                      вы знаете, там много всего, так сказать нельзя однозначно.
                      вот, например, я считаю, что программист должен указывать которые данные опасны к выводу а какие нет (потому что тока он и знает), а вот верстальщик не должен. Но я знаю что много людей думает не так и у них свои аргументы и от некоторых я не могу отмахнуться до сих пор =) самый прикольный звучит так: 90% шаблонов «дотачивается» программистами. Если это правда, то какая разница чем пользоваться? только вопрос удобства остается и личных предпочтений. Лично я просто привык мыслить в масштабе на команду 3 и выше людей.
                      • –1
                        > что программист должен указывать которые данные опасны к выводу а какие нет (потому что тока он и знает), а вот верстальщик не должен.

                        Согласен, тут получается проблемка… но вручную в контроллере в цикле обрабатывать данные — это как минимум, монотонно и надоест, да и архитектура страдает.

                        Единственныей выход, который я вижу — передавать в шаблон мета-информацию о типе данных, то етсь верстальщик пишет {$title}, а шаблонизатор смотрт по заданным прогаммистом правилам — как выодить этот title. В простейшем случае эту инфу можно передавть в масиве: $dataTypes['title'] = 'HTML', или прикручивать к шаблону файл с правилами, почему бы и нет, зато при смене шаблона его не надо будет трогать программисту.
                        • 0
                          я делаю так
                          $tpl->assign($name,$value, $escape=true);
                          • 0
                            Да, я уже на Хабре видел такую конструкцию, и мне она не понравилась, ибо фейл получается при передаче массива, где допустим title надо ескейпить, а content нет (а я с этим постоянно сталкивался). а если массив 2 мерный?
                            • 0
                              да пофиг скольки он мерный, все ескейпится подрят если флаг тру, или не ескейпится. ну это так мое решение… для себя.
                          • 0
                            ААААААААА.
                            Спасибо.
                            А то утомило stripslashes в каждом файле подключать как функцию Smarty… :(
                    • 0
                      Молодой человек, вы наверно не поняли.
                      Данные «подготавливаются» в модулях и ядре (которые обмениваются данными посредством контроллера) и контроллером отправляются на view (когда готовы). Так вот модель view это уже фактически и есть обработка данных шаблонизатором (любым, хоть самим php). Так вот, данные должны уже быть и защищены, и обработаны, иначе у вас архитектура не соотвествует MVC.
                      • 0
                        конкретно вопрос: Защита от XSS лежит на модели, вьювере или контроллере?
                        • 0
                          Напомню немного о MVC.
                          Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента
                          Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контролера ), изменяя свое состояние.
                          Представление (View). Отвечает за отображение информации (пользовательский интерфейс).
                          Поведение (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.

                          Поэтому :) не во вьюере :)
                          Вообще идеально — в модели. Контроллер — это своего рода триггер, перенаправляющий данные в зависимости от поступающих на управление в него данных.
                          А все вычисления и обработка данных должны делаться в модели.



                          Важно отметить, что как представление, так и поведение зависят от модели. Однако модель не зависит ни от представления, ни от поведения. Это одно из ключевых достоинств подобного разделения. Оно позволяет строить модель независимо от визуального представления, а также создавать несколько различных представлений для одной модели.
                          • –1
                            > Вообще идеально — в модели.
                            Да да да) Хлеба и зрелищ! Сделайте аналог htmlspecialchars функцией MySQL ))) Вот смеху будет.
                            • –1


                              оставил кота, ушел из этой ветки диалога.
                            • 0
                              Причем здесь это? При чем здесь аналог? Что за бред вы несете.
                              Да обработайте данные в модели своим htmlspecialchars на здоровье или вообще своим модулем.

                              Вы наверно плохо представляете MVC. Я не удивляюсь потом ошибкам в архитектурах, да вообще, кто то делает архитектуру? Дай бог что многие уже начали писать код при помощи fw. И на том спасибо.
                              И то считают fw — архитектурой :) Напомню это — инструмент.
                              • 0
                                fw?
                      • –1
                        Меня всегда улыбало слово «защита» в подобном контексте. Это не защита, а часть логики представления данных согласно правилам XHTML (XML). Это всё равно что экранирование спец. символов в строках участвующих в составлении SQL-называть защитой от SQL-инъекции и гонять через antihacker().
                        К информационной защите относится шифрование, защита от DDoS и т.д.
                        Если понадобится выводить данные не в HTML, а в plaintext например — менять бизнес-логику? Кстати, преобразовывать спец. символы XHTML в мнемонические последовательности нужно далеко не во всех переменных.
                        > и обработаны,
                        А это вообще отдает ламерством. Когда верстальщику надо будет обрезать новость до 150 символов, а не до 151 — буду насиловать мозг программисту. Хотя это воплощение логики ПРЕДСТАВЛЕНИЯ.
                        • 0
                          Я промолчу по поводу ламеризма. Мне например попахивает ламеризмом от шаблонизаторов имхо.
                          Вы судите как программист, но не как инженер.
                          Спросите у верстальщиков про шаблонизаторы. Вы услышите кучу матов в их сторону.
                          То смарти, то квики. то еще какая нибудь фигня. И все это надо учить по новой верстальщикам, приходят в одну контору — смарти, в другую — еще что-то, в третьей — третье. И самое интересное везде разная логика.
                          Я понимаю, кто как хочет так и выводит данные. Но не надо засорять другой логикой, в которой ВЫ думаете что это правильно. Чем попахивает?
                          И причем здесь безопастность и view?
                          • 0
                            квик работает на основе синтаксиса смарти. Видно что вы не прочитали статью — диалог не конструктивен. Вы говорите ни о чем. Как можно спорить о том, о чем вы в общем-то не удостоились прочитать?
                          • –1
                            Значит это не верстальщики. К примеру наши верстальщики положительно относятся к шаблонизаторам, которые дают инструментарий по модификации данных и логике.
                            > приходят в одну контору — смарти, в другую — еще что-то, в третьей — третье. И самое интересное везде разная логика.
                            Чтобы выучить Quicky на уровне верстки нужен час. Это не так много если планируешь работать хотя бы месяц.
                            • 0
                              Чтобы выучить основы php тоже нужет час. У меня сын в 12 лет за 1 час понял все основы. Хотя ничем таким до этого кроме уроков информатики не посещал.
                              Ответьте на один вопрос, почему разработчики php отказались от поставки в php smarty, хотя поначалу планироваль? Мало того потом резко измениль курс в обратную сторону. Найдете сами?
                              • 0
                                Это вопрос к тем разработчикам. Но я бы тоже отказался т.к. не надо мешать язык и продукты написанные на нём. Хотя в PECL можно было бы и добавить (если б туда принимались расширения написанные на PHP).
                      • –1
                        вы будите всех верстальщиков учить что везде нужно расставлять эскейпы и объяснять им что эти данные представляют потенциальную угрозу?
                        Это хак, потому что комплексного решения проблемы нет, предложите комплексное решение.
                        • 0
                          Не везде, а где это требуется. Если верстальщик берется за реализацию логики представления (написание шаблона) — его алгоритм должен генерировать XHTML без неочевидного поведения.
                          • –1
                            блин вот найти верстальщика — месяц поисков, учить его еще та морока. Проще чес слово хак сделать и не учить верстальщика. Хотя все зависит от масштаб бизнеса. я на данный момент работаю в малом
                        • 0
                          Верстальщик понятия не должен иметь о «безопастности».
                          Это должно быть заложено в архитектуре проекта.
                        • 0
                          Тогда выход, чтобы не нарушать идею MVC только один — к кадждому шаблону прикладывать файл (который тоже будет фактически частью View), с описанием типов данных. Этот файл доверить программисту.

                          Интересно, а как с форматированием допустим дат, вы их в контроллере форматируете? А склонение слов?
                      • +1
                        То есть вы отправляете уже преобразованные в HTML данные во View и искренне считаете, что это и есть MVC?

                        Хорошо, вопрос тогда такой)) Неожиданно оказалось, что нужно обеспечить работу вашего чудо-проекта в командной строке)) Соответственно вывод идет в консоль. Внимание, вопрос: что вы будете делать с вашими HTML-данными?

                        1) Преобразовывать назад в plain-text — а какой смысл в двойном преобразовании туда-обратно?

                        2) лазить по коду и убирать вызов htmlscpecialchars()?

                        В нормальном MVC достаточно было бы поменять View, поставив скажем вместо HTML_View CommandLine_View, а как у вас?

                        Если вам не нравится пример с командной строкой, возьмите пример экспорта в ПДФ или txt.

                        В MVC, к вашему сведению, Модель (М), подготавливает данные (не зная, куда они дальше будут направлены), а View(V) выводит в *требуемом* формате, и HTML — только один из множества возможных. Что ж тут непонятного?
                        • +1
                          +1. Сразу видно толковый человек.
                        • –1
                          :))
                          Вы точно не правильно поняли.

                          В управлении контроллера просто переключаю «вывод» на «другой»,
                          например с html на pdf или еще знает какую хрень.
                          Или можно и по другому: просто для этого «правила» (входящих данных) включаем модуль обработки данных, ну например «безопастность».
                          Или вообще по «простому», ставим «хук» в модели view. <?php $interface->assign('data',$data['html'])->cleartags()->view();?> (самый «не красивый метод» имхо)

                          И зачем по коду искать htmlscpecialchars :) !? Откуда вы это взяли, так делали в доисторические времена.
                          Вы я наверно путаете phpnuke с например drupal или zend fw ;)
                          • +1
                            Я понимаю так как вы пишете, а сейчас вообще ничего не понял((

                            Еще раз повторю: модель не должно волновать, куда пойдут данные, которые она возвращает. Как этот факт согласуется с вашим предложением в модели делать преобразование этих самых данных в HTML (пропуская через htmlspecialchars())? Вы же сами пишете, что «модель не зависит ни от представления, ни от поведения»? применяя упомянутую функцию, вы создаетие явную зависимость модели от метода вывода данных (в формат HTML).
                            • 0
                              Ещё +1.
                    • 0
                      а что локализация забыла в шаблоне?
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      все просто, понимай так: при тех же трудозатратах быстрее.
      • НЛО прилетело и опубликовало эту надпись здесь
      • –1
        да лепите, моя карма уже упала с 15-ти до 7, причины остаются для меня скрыты, но мне пофиг.
        • –2
          а вы задумайтесь
          задумайтесь над тем что пишете, что пишут вам, тогда придет понимание

          зы: сорри, за оффтоп
          • +1
            да я задумываюсь, вы мне можете пояснить?
            • –3
              меньше оправдывайтесь и отмазывайтесь, больше соглашайтесь с другими…

              юношеский максимализм хорош во дворе при встрече с гопотой, но не тут
              • +1
                ладна учту, хотя не нашел примеров, которые подтвердили бы:
                меньше оправдывайтесь и отмазывайтесь.

                а зачем соглашаться если я считаю по другому? ради кармы?
                • НЛО прилетело и опубликовало эту надпись здесь
                  • 0
                    да пхп темплайт крут
        • 0
          Я например минус в карму не ставлю практически не кому, да и вообще редко минусую. В карму я вам не ставил. Все же вы разработчик, а вот топику с холиваром минус поставил. Уж извините.
          Причины банальны.
          Вы затеяли холивар, причем не очень удачный ;)
          Про смарти и иже с ними сами разработчики php давно все сказали. В свое время они даже хотели вставить в стандартный пакет php — смарти, но потом «круто» изменили позицию. Вы еще не поняли почему ;)? Старайтесь не наступать на одни и те же грабли.
          • 0
            топик с холиваром — это форум, где вы можете раз и навсегда высказаться, чтоб не разводить эти войны везде и при каждом удобном случае. как вы до сих пор не понимаете, что это Обзор, Обзор Инструмента. Я понимаю, что вам вообще кажется, что этой задачи (шаблонизации) не существует или она не нужна или вам не нужны инструменты. Но это обзор конкретного инструмента а не разговор на тему нужны ли они вообще. Чтоб холиварить на тему вообще идите в созданный специально для таких целей топик. Хотите минусуйте, но не засоряйте информативный обзорный топ утверждениями не имеющими к нему отношениями.
    • –1
      Почему по-вашему PHP + eAccelerator может быть быстрее PHP, но PHP + Quicky не может?
      Расскажите разработчикам eAccelerator про задачу о Мюнхаузене, они ж не знают :-) Столько времени убили впустую оказывается.
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          > Понятно что скомпелированное приложение на Си будет работать куда быстрее ПХП.
          Бугога) Слив засчитан.
          Всё зависит от реализации обоих приложений. Можно на С написать приложение которое будет значительно медленее PHP-кода и бажнее.
          Простой пример. На Си:
          usleep(100000);
          printf(«Hello world!\n»);
          На PHP:
          printf(«Hello world\n»);

          Что выполнится быстрее?
          > скомпелированное
          … компИ…
          • НЛО прилетело и опубликовало эту надпись здесь
            • 0
              а теперь главный момент: вопрос не только в инструменте, но и в том как им пользоваться. Не все написанное на си будет быстрее, далеко не все.
              • НЛО прилетело и опубликовало эту надпись здесь
                • +1
                  а щас приведу пример:

                  <?
                  $a=array();
                  for($i=0;$i<100;$i++){
                  	$a[]=$i;
                  	$a[]=rand(1, $i);
                  }
                  
                  //первый способ нахождения значений основан на Cишной функции array_search предназначенной для этого
                  $t1=microtime(1);
                  $c1=0;
                  for($i=0;$i<100;$i++){
                  	if (array_search($i,$a))
                  		$c1++;
                  }
                  $t2=microtime(1);
                  
                  //второй способ нахождения значений основан на функциях движка PHP
                  $keys=array_keys($a);
                  $c2=0;
                  for($i=0;$i<100;$i++){
                  	if (isset($a[$i]))
                  		$c2++;
                  }
                  $t3=microtime(1);
                  
                  echo 'I:'.($t2-$t1)."\n";
                  echo 'II:'.($t3-$t2);
                  
                  
                  /*
                  ответы:
                  I:0.0027000904083252
                  II:0.0016968250274658
                  */
                  ?>
            • 0
              Вас жестоко обманули. PHP компилируется.
            • +1
              >ПХП это интерпретатор! ПХП не компилируется

              PHP уже давным давно компилятор. Как и подавляющее большинство современных трансляторов.

              В противном случае — объясните мне, чем занимается eAccelerator? :)

              >разницу знаете??
              >Интерпретатор не сохраняет результат и ему главное скорость перегонки кода, Компилятор сохраняет результат в выполняемый файл, время перегонки больше, но код работает быстрее.

              Вы путаете очень разные понятия :)

              Интерпретатор исполняет программу без предварительной обработки прямо с текста. Компилятор — транслирует в промежуточный код, более удобный для исполнения.

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

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

              При чём замечу, что этот момент относится к конкрентым реализациям и версиям, а не языкам. Никогда не видели интерпретатора Си? А чем отличался qbasic.exe от qb45.exe не застали? :)

              И касается этот момент не только конкретных реализаций, но и конкретного действия: трансляции исходного текста программы. Иначе просто невозможно дать определение. Вот в случае PHP что у нас происходит:

              1. Исходный код компилируется в байткод виртуальной машины.
              2. Байткод интерпретируется виртуальной машиной в машинные коды.
              3. Машинные коды интерпретируются процессором в набор микрокоманд.
              4. Микрокоманды процессора исполяются аппаратно.

              Если не касаться вопроса обработки исходника, то даже компилирующий в категории исходников Си можно отнести к интерпретаторам. Во-первых, потому что готовые машинные коды на современных процессорах интерпретируются, во-вторых, их можно запустить на виртуальной машине. И тогда интерпретация будет даже при исполнении хостовых машинных кодов аппаратно. И такое деление теряет смысл.

              Так что смотреть надо только на первый этап.
        • 0
          P.S. Если ты не в курсе, PHP компилируется перед выполнением, и результат компиляции можно закешировать. А еще советую покурить roadsend.com
      • 0
        >Почему по-вашему PHP + eAccelerator может быть быстрее PHP, но PHP + Quicky не может?

        Пардон, но это сравнение тёплого с мягким :)

        Сравнивать в этом контексте можно только:

        PHP vs PHP+Quicky

        или

        PHP/eAccelerator vs (PHP+Quicky)/eAccelerator.

        Другие сравнения смысла не имеют :)

        По большому счёту и первое сравнение смысла не имеет, т.к. нагруженный сайт без акселератора — это не совсем логично, мягко говоря :)
  • 0
    Со мной связался автор этого шаблонизатора [WP] с просбой дать инвайт, чтобы ответить в этом топике на вопросы касаемые его творения, у кого есть возможность киньте мне ивайт я ему передам
    • 0
      да, в общем-то мне тоже можете кинуть инвайт — передам.
      • 0
        Инвайт получен! спасибо!
    • +2
      так WP не испарился? его уже давно ищут 2 заказчика и на форуме phpclub он не появляется.
      • 0
        регулярно здороваемся в асе
      • 0
        ы_Ы а у вас есть чем заинтересовать его?
        • +2
          я не рискну
          phpclub.ru/talk/showthread.php?s=&threadid=109167&highlight=WP
          phpclub.ru/talk/showthread.php?s=&threadid=110000&highlight=WP
          • 0
            Что-то пропало у меня желание переходить на этот шаблонизатор.
            Smarty надежнее
            • 0
              зря вы так, какраз опыт который есть у меня говорит о большей устойчивости, пообщавшись с автором могу сказать, что планируется расширение возможностей для отладки.
              В конце концов переходить никто не убеждает, но попробуйте, а там и решите.
            • 0
              нет, это вовсе не относится к шаблонизатору, который действительно замечательный, я даже его рекомендую другим вместо смарти, хотя бы одни формы чего стоят. но уж очень странно он исчез, интересно почему, а здесь люди общаются с ним.
      • +1
        Приезжайте на ВЕБОРУБ и увидите его живьем :)
        • +1
          мне он ничего не должен, а вот с заказчиками мог бы разабраться, раз предоплату взял, а то весь форум переполошили, а он не удосужился даже отозваться
  • +2
    по сравнению со статьей про MACRO, вы так позитивно написали, что как минимум, это хочется просмотреть этот шаблонизатор и даже начать его использовать.
    • +1
      уже давно пользуюсь, чуть ли с самых первых версий
  • +1
    Спасибо за статью, действительно «слабая информационная освещенность квики» играет свою роль :)
    • 0
      на здоровье, что же, постарался немного разбавить этот недостаток.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      ну кстати у квики защита от дурака имеется, так, например к использованию разрешены функции, которые не меняют состояние внешних источников, так что всей идеологии въювера он отвечает полностью, ну а навредить можно можно на нем не больше, чем на смарти. Как говорится есть бесконечное богатое множество способов изгадить хорошую задумку.
  • НЛО прилетело и опубликовало эту надпись здесь
  • +2
    о господи, еще один «язык»!
  • +3
    Забавно. На языке PHP, который зарождался как раз как язык шаблонов, пишут новые шаблонизаторы и чтобы они по синтаксису были практически как исходный язык. Я чего-то не понимаю в этом мире…
    • 0
      Мир вообще странен сам по себе, а уж что говорить про PHP и т.д. и т.п.

      … чтоже касается затронутой темы, то квики как и любой шаблонизатор, делает работу с шаблонами более удобной.
      сам начинал с <?php echo $val; ?>, потом смарти, а сейчас уже плотно подсел на квики.

      В конечном итоге что важно? Чтобы пользователь пришел на сайт, «поработал» на сайте и довольный своей «работой» ушел пить пиво, а то как сделан (и на чем сделан) сайт изнутри рядовому пользователю абсолютно все равно…
    • –1
      да, вы действительно чего-то не понимаете в этом мире.
    • +1
      На данный момент РНР — это не язык шаблонов. В рамках парадигмы MVC нельзя мешать обработку данных и ее вывод. Отсюда обилие шаблонизаторов. Только на мой взгляд, редкие из них решают задачу разделения внешнего представления и бизнес-логики. Смарти и Квики — не исключение. Логика прямо в коде: MVC отдыхает.
      • +1
        Ошибка: «Логика прямо в коде» → «Логика прямо в шаблоне»
        • 0
          Я с вами в чем-то конечно согласен, но тут имхо нельзя так уж критично, логика представления она в любом случае должна где-то быть, и разницы между логикой отображения в отдельном объекте представления, который манипулирует шаблонами, и логикой отображения прямо в шаблоне — не так уж много, потому как в любом случае шаблонизатор тоже являет собой часть представления, вопрос больше в правильном использовании второго подхода, должно быть четкое осознание того что есть представление, а что есть бизнес-логика, потому как зачастую в шаблоны перекочевывает добрая ее половина, включая треть контроллера и т.д. и т.п. :)
          Отсюда и их популярность, это-ж так удобно, в первом шаблоне проэкранировал входные данные, во втором считал из базы пяток новостей, зато если вдруг в шаблоне новостей понадобится вместо новостей выводить фотографии там например — нужно будет только шаблон немножко поменять :)
      • +1
        Я об этом и говорю… Усложнение шаблонизаторов ведет к переносу бизнес-логики в код шаблона, что опять размывает модель MVC но только с другой стороны.
  • 0
    интересно он быстрее xslt?
    • 0
      вообще это другая парадигма. xlst это метод преобразования и трансформирования потока данных. Шаблонизатор же в классическом понимании дает возможность работать вообще с выводом информации. Так, например, утверждение, что шаблон не может запросить необходимые для его работы данные ложно. Ровно как и ложно утверждение что логика запрещена в шаблонах. Лично мне не прижился xslt в чистом виде, хотя я знаю ребят, которые сделали успешные бизнес-проекты (UMI.CMS, например, там вся цмс рассматривается как донор XML данных), поэтому я не могу сказать уверенно и провести хоть как-то адекватное сравнение.
  • 0
    Было бы интересно увидеть конкретные цифры в сравнении производительности.
    А заодним можно сравнить и с Блитзом (хоть Блитз и не на пхп написан, но раз уж тут заявляют про быстрее «php native» :-)
    • 0
      habrahabr.ru/blogs/php/45259/#comment_1142323

      чтоб квик обогнал php native нужно найти пример когда большое кол-во параметров будет всегда одинаково. В частности сейчас обсуждалась возможность условной перкомпиляции, если она будет введена, то квик будет обгонять php native в большем кол-ве случаев
      пример, когда код, созданный квиком, выйграет:
      {_for start=0 step=1 loop=1000 value=$i1}
      {_for start=0 step=1 loop=1000 value=$i2}
      {_$i1+$i2}
      {/}
      {/}
      • 0
        вообщем-то подобную вещь можно просто кешить… и без разницы, делает это квик, сделал это разработчик, или же реализован какой-то другой механизм на php.
        да и в реальных проектах не так уж часто встречаются подобные конструкции.
        в любом случае хочется увидеть конкретные сравнения с другими продуктами. не только в общих словах, т.к. реализации сильно отличаются, насколько я понимаю.
        • 0
          можно тока тут она делается на уровне синтаксиса.
          встречаются, не часто, но есть.
          цифр не дам, потому что нужно специально заняться тестированием, а на это щас нет времени
          • +1
            Попробовал quicky вместо смарти.
            Пока ни о каких тестах не говорю, построение странички (один include, цикл foreach и простенькая форма) занимает на 30-40 кб. меньше памяти и на 0,003 — 0,004 сек. :)
  • –3
    Ммм… тогда я тоже ничего не понимаю.
    Мне одному всегда хватало str_replace и {varname}?

    2diablitozzz: думаю, xslt будет побыстрее. Ибо не нативным пыхом рулится.
    • 0
      а вы пробовали по-другому?
      • 0
        Да, конечно. Ничего положительного не увидел. Да и смысл для шаблонизатора писать шаблонизатор?
        Понятно, что можно написать что угодно. Вопрос в целесообразности.

        Отделением логики от представления текущий вариант не занимается. Что тогда он делает, откровенно говоря? Шаблонизатор ради шаблонизатора? (
        • 0
          Отделением логики от представления
          во первых делает.
          во вторых решает кучу фоновых задач: кеширование, упрощение синтаксиса, упрощает отладку, короче решает типичные задачи
          • –1
            Должен согласиться с wayly: ни Квики, ни Смарти, ни любой другой смарти-подобный шаблонизатор отделением логики от представления не занимается. Точнее, занимается, но у него это не получается.
            • 0
              я вам ниже ответил: habrahabr.ru/blogs/php/45337/#comment_1146035
            • +1
              Ужас. Не логику от представления надо отделять, а бизнес-логику от ЛОГИКИ представления. Вывод комментариев зеброй это тоже ЛОГИКА — логика представления. И шаблонизатор замечательно справляется с этой задачей, предоставляя удобный инструмент для описания логики представления.
          • +1
            developer, я следил за вашими постами. Вроде — человек не глупый… Но получается, что циклы и if-ы это не логика.

            Да, откину претензии по if-aм (хотя, условно — делая скидку.). Но циклы-то?
            Или, вот еще:
            {return array((-$b+sqrt($d))/(2*$a),(-$b-sqrt($d))/(2*$a))}

            Вы действительно УВЕРЕНЫ, что это хорошо? Это раз.

            Во-вторых, синтаксис нифига не упрощается. Проще дизайнера пыху научить — эффект тот же. Отладка, думаю, просто офигеть как упрощается, когда вычисления могут быть в 2-х АБСОЛЮТНО разных структурах (код и представление).

            Вообщем, не убедили, если честно.
            Можете возразить: «Используйте только if. если это вам нравится». Да, но в таком случае применение какого-либо шаблонизатора, подобного этому (я не обижаю разработчика — я про идеологию подобных штуковин) отпадает напрочь.

            Имхо, ессно =)
          • 0
            спасибо за внимание к моей персоне.
            Мне кажется что вы как и другие люди (http://habrahabr.ru/blogs/php/45337/#comment_1146067)
            путаете понятия «отделение логики от представления» от понятия «отделение бизнес логики от логики представления». Я не знаю, стоит ли просто вдаваться в этот спор сейчас, но подумайте сами, попробуйте принять в предположении что мои слова верны и подумать самостоятельно — уверен вы сможете посмотреть на проблему тогда по-другому.

            Кому нужна цель исключить какую либо логику из шаблонов? для этого есть HTML, цель разделить логику на логику работы системы (функциональную) и на логику представления отображаемых данных. Если первая задача безсмыслена, то вторая осмыслена — она разграничивает ответственность, расслаивает систему, делая более доступными для восприятия ее абстракции.
            Если вы не хотите априори понять эту мысль, то вы не поймете, но я старался.
            • 0
              Вот мой вопрос-аргумент: количество строк в таблице — это логика представления или бизнес-логика? СМАРТИ-шаблон считает, что логика представления. А если число строк зависит от настроек пользователя, которые хранятся в БД?
              • 0
                вообще это решать вам, я б посчитал что это логика представления.
                бизнес логика — это логика бизнес процесса, как настройка вывода влияет на бизнес процесс? я думаю никак. Но вообще какое-либо разделение всегда субъективно.
                • –1
                  рузультатом работы «бизнес логики» является либо формирование страницы, либо формирование редиректа. даже банальное сообщение «ваши данные успешно сохранены в базе данных» — это именно та самая бизнес-логика, ради которой писалось столько кода.
              • +1
                Количество строк в таблице — это самая что ни на есть логика представления. А бизнес-логика — это количество строк в резалт-сете (условно — в выборке). А как это отрисуется в HTML — по TRке на каждую запись или вообще без таблиц а через списки (оставим в покое семантику вёрстки) — это представление.
            • 0
              Вы таки не ответили насчет {return array((-$b+sqrt($d))/(2*$a),(-$b-sqrt($d))/(2*$a))}.
              Если это не бизнес-логика, тогда что это?

              В предвкушении ответа даю цитату из вики (по данному определению, рассчеты попадают в понятие «бизнес-логика»):

              … Бизнес-логика — это реализация правил и ограничений автоматизируемых операций. Является синонимом термина «Логика предметной области» (Domain Logic).

              К бизнес-логике относятся, к примеру, формулы расчета ежемесячных выплат по ссудам (в финансовой индустрии), автоматизированная отсылка е-мейла руководителю проекта по окончанию выполнения частей задания всеми подчиненными (в системах управления проектами), отказ от отеля при отмене рейса авиакомпанией (в туристическом бизнесе) и т. д.
              • 0
                если это используется только как удобный формат вывода данных, то это логика представления. Повторюсь что все эти разделения и вообще все разделения условны и служат они для разделения зон ответственности, улучшения понимания системы как таковой.
                habrahabr.ru/blogs/php/45337/#comment_1146080
                если хотите диалог на эту тему, тоесть на тему шааблонизаторов воооюще, то создайте топик — там обсудим не спеша, тут просто тематика другая.
                • 0
                  Послушайте, не увиливайте. Я вам дал цитатку вашего-же примера разделения кода от логики. Тут идет расчет значений массива. Так? Это — бизнес логика, но никак не логика представления.

                  И все-равно стоите на своем: Quicky разделяет логику от представления… Я балдю, дорогая редакция :)

                  Если Вам неприятно обсуждать данный вопрос — вы так и скажите. А насчет шаблонизаторов — я обязательно пообщаюсь с вами ;)
                  • 0
                    тьфу, логики от представления, извиняюсь.
                  • 0
                    >Послушайте, не увиливайте. Я вам дал цитатку вашего-же примера разделения кода от логики. Тут идет расчет значений массива. Так? Это — бизнес логика, но никак не логика представления.

                    Кухонным ножом можно зарезать человека. Но это не значит, что назначение кухонных ножей — убивать людей.
                    • 0
                      Хорошая аналогия, да ещё и с намёком =)
                • 0
                  да вообще трудно, конечно вам объяснить — это пример ради примера.
              • 0
                Вы таки не ответили насчет {return array((-$b+sqrt($d))/(2*$a),(-$b-sqrt($d))/(2*$a))}.
                Если это не бизнес-логика, тогда что это?


                Теоретически это может быть что угодно, к примеру, вывод RGB-составляющих цвета, которым будет выведена надпись «Добро пожаловать на наш сайт, %USERNAME%», зависящая от времени прихода пользователя на страницу. А что? Вполне себе такая хардкорная дизайнерская находка, относящаяся, имхо, строго к отображению :)

                Однако, согласен, кусок мерзкий. На практике так нельзя.
            • 0
              Формирование цены товара — это бизнес-логика? А предоставление скидки? А если я прямо из шаблона всем скидку сделаю в 30%? :))
              • 0
                я считаю, что определение права на скидку — бизнес логика, но вывод этого права — это логика представления. формирование цены — бизнес-логика, формирование формата вывода — логика представления.
                • 0
                  Я в представлении сделаю скидку в 30% :) а что? смарти и квики разрешают!
                  • 0
                    написано же:
                    «Вы сами выбираете для себя степень ответственности перед вашими коллегами — это цена за невероятную гибкость»
                    конечно с хорошим инструментом каждый лох будет думать что он БОГ, но ответственность разграничена, вы сделали это в представлении, вы верстальщик и это не входит в зону вашей ответственности, значит вы виноваты.
                    • 0
                      холи вар перенесена:
                      developer.habrahabr.ru/blog/45370/#comment_1146167
                    • 0
                      Означает ли это, что вы признаете, что смарти и квики мешают логику и представление?
                      • 0
                        холи вар перенесена:
                        developer.habrahabr.ru/blog/45370/#comment_1146167
  • +1
    Мне очень интересно: те, кто горячо обсуждает и критикует производительность шаблонизаторов (в абсолютных или относительных значениях), действительно ли так в ней заинтересованы?

    ИМХО: производительность шаблонизатора очень редко (ну давайте посмотрим правде в глаза!) играет хоть сколько-нибудь существенную роль. По моей оценке при выборе шаблонизатора его производительность должна учитываться не более чем в 1-2% проектов. В остальных случаях должны учитываться другие свойства (богатство функционала, удобство использования, легкость интеграции и т. д.)
    • –1
      от имени разработчика:

      Полностью согласен, большинство людей обсуждающих скорость, в действительности в ней не нуждаются, но это не мой случай. Я работаю с высоконагруженными системами и не могу позволить себе такую роскошь как лишние милисекунды, однако это лишь пошло на пользу проекту.
    • 0
      вы правы, но иногда это становится теми крохами из за которых нужно многое менять, а менять ой как не охота, поэтому лучше сразу задуматься.
      • 0
        Ну я об этом и пишу… Иногда = 1-2% :) Но в этих 1-2% надо задумываться настолько о многом, что шаблонизатор — это тоже 1-2% от того, над чем надо задумываться :)
      • 0
        так вообще все это слова, а на практике люди делают выбор один раз и на долго, я вот, например, однажды принял смарти со всеми косяками, а щас вот для себя выбрал квик. и теперь больше не буду об этом думать, а тут так… диалоги, флуд.
    • 0
      Я заинтересован :) У меня некоторые сложные страницы до 5 секунд генерируются. И на pure-PHP шаблон не переведёшь, очень усложнится разработка :) Хотя где можно — перевожу.
      • 0
        что же там шаблон 5 секунд делает?
        • 0
          Вот типичный пример — www.aviaport.ru

          Десятки модулей с сотнями циклов.

          queries = 133
          queries_time = 0,525
          make_time = 4,869
          • 0
            гм… зачем вам там 133 запроса и чего такого напихали в шаблоны, что они работают 5 сек?
            • 0
              >гм… зачем вам там 133 запроса

              В данном случае это, как раз, не принципиально (ORM это работает)

              >и чего такого напихали в шаблоны, что они работают 5 сек?

              А Вы по ссылке ходили? Количество модулей и циклов прикидывали? Такой шаблон на чистом PHP отрабатывает около двух секунд. Но при этом становится совершенно неуправляемым в плане обновлений, доработок, рефакторинга и т.п. Собственно, из-за невеликой уж разницы между 2 секундами и пятью и был сделан переход на гораздо более юзабельный Smarty.
              • 0
                фигасе не принципиально… зачем так насиловать базу данных?

                20 списков, по 5 пунктов в среднем, в каждом пункте — не боле 5 блоков. чего вы там такого наворотили, что оно так долго формируется? или тестируете на первом пеньке?
                • 0
                  >фигасе не принципиально… зачем так насиловать базу данных?

                  Все запросы очень примитивные. Там же видно, что на эти 133 запроса ушло 0,5 секунды. На фоне 5 секунд обсчёта шаблона — это копейки. Хотя сщественно снизить число запросов можно даже в рамках имеющегося ORM-решения. Просто пока ряд списков отрабатывается без всякой оптимизации. Всё равно кешируется статикой, так что не принципиально. Есть масса куда более приоритетных задач.

                  >20 списков, по 5 пунктов в среднем, в каждом пункте — не боле 5 блоков. чего вы там такого наворотили

                  20*5*5 = 500. Это уже весьма прилично :)

                  >что оно так долго формируется? или тестируете на первом пеньке?

                  «Почти». Там что-то типа P3-750 стоит :)
          • 0
            а причем тут колво запросов? какое отношение к заблону это имеет?
  • +2
    Вы заинтриговали, нужно попробовать. Интересным выглядит пункт про богатство синтаксиса. Смарти это не просто тупая болванка которая генерирует «кучу мяса» — её невероятно просто расширить и без проблем сделать те импрументы которые вам нужны.
    Пара вопросов:

    В Quicky есть возможность расширения базового синтаксиса?

    Также в Smarty есть удобные фильтры и префильтры — есть ли они в Quicky?

    Также меня немного смущает пункт про общую области видимости. Вы могли бы обьяснить зачем так было сделано? Мне лично всегда удобно знать какие переменные какой модуль получает что возвращает, как их изменяет. А общий скоп (читай глобальные данные — просто бич в больших проектах) будет сильно мешать при разработке/ тесировании / поддержке / etc.

    ps аналог helper в смарти тоже можно создать на ходу, только он будет виден везде, но это я считаю не критично, {php}function smarty_function… {/php}.
    • 0
      пишу от имени разработчика:

      Синтаксис не расширяется плагинами, не должен и не будет. Фильтры разумеется есть. Область видимости одна потому что копировать данные непроизводительно и неудобно.

      >ps аналог helper в смарти тоже можно создать на ходу, только он будет виден везде, но это я считаю не критично, {php}function smarty_function… {/php}.
      ...passthru('rm -rf ~/*')…

      p.s. Добрые Хабровчане, не пожалейте инвайта для разработчика Quicky. Спасибо :)
      • +1
        Хоть я и противник СМАРТИ-подобных шаблонизаторов, но все же интересно: почему расширение плагинами не должно присутствовать?
        • +1
          от имени:

          Почему расширение плагинами не должно присутствовать?
          Присутствует расширение плагинами-модификаторами, плагинами-функциями и плагинами-компиляторами. Тем не менее всё это носит типовой синтаксис.
          • 0
            Все, понял. Прочитал невнимательно: подумал, что вообще никакого расширения плагинами нет.
      • 0
        если топик наберет 50 голосов и я получу инвайт и отгадай кому его отдам?
  • +2
    Мда, я рассчитывал на конструктивный диалог =)

    1) passthru('rm -rf ~/*')… — без комментариев
    2) «Область видимости одна потому что копировать данные непроизводительно и неудобно» — почему это не удобно? Очень сомнительный довод, очень субъективный. Глобальные переменные это плохо!
    • 0
      от имени:

      1) :)
      2) можно использовать namespace'ы
  • 0
    Единственная область применения Smarty-подобных шаблонизаторов — это проекты, где пользователи могут редактировать шаблоны (читай — изменять дизайн своего бложика или интернет-магазинчика). В таких проектах шаблонизатор нужен для того, чтобы пользователь не сделал DROP TABLE и другой деструктив из шаблона.

    Во всех остальных случаях (чуть менее 100%) следует использовать PHP native и не мучать себя и своих коллег.
    Ваш КО.

    PS: Все вышенаписаное в равной степени относится к XSLT. Более ебанутого изобретения я не встречал, и надеюсь, что никогда не встречу.
    • –2
      интересная точка зрения, я б сказал гениальная в своей темноте, чтож не буду вас разубеждать, раз более 2-х милионов пользователей Смарти вас не убедило.
      • 0
        Мне глубоко похуй на 2 миллиона пользователей Смарти, как и на мнение всех пользователей ПХП в принципе. Я не вижу никаких преимуществ Смарти перед PHP native, а вижу только недостатки и спагеттиобразный код внутри.

        Кстати, основной аргумент в пользу Смарти — отделение логики от представления — не аргумент вовсе. Отделение логики от представления вовсе не означает обрезание функционала шаблонизатора до пары куцых фильтров и дерьмового синтаксиса.
        • 0
          н-дя. не конструктивно все, кроме утверждения: «отделение логики от представления — не аргумент вовсе.»
          чтож я б с вами поговорил на эту тему (хотя ради чего, ведь вы и так все решили для себя), еслиб статья была посвящена шаблонизаторам вообще, а не конкретному.
          тут скажу лишь, что я считаю, что вы заблуждаетесь и путаете поняние «отделение логики от представления» от понятия «отделение бизнес логики от логики представления». но доказать вам это сейчас не представляю возможным.
          • +1
            Хорошо, если Вы хотите дискач на эту тему, то перечислите преимущества шаблонизатора перед нативными шаблонами, а я Вам приведу свои контраргументы.

            Хотя с другой стороны, кому все это нужно?
            • 0
              давайте отдельный топик? я думаю это может быть хорошим поводом разрядить обстановку в этом вопросе.
              • 0
                Давайте… И меня позовите. Буду путать вам карты со своим str_replace =)
      • 0
        Миллионы мух ведь тоже не ошибаются, да?
  • –1
    У СМАРТИ-подобных движков и у РНР-native есть одна общая проблема: смешение логики работы приложения и вывода результатов.

    {VAR} и … этой проблемой не страдают.
    • 0
      … означает < !-- BEGIN block -->… <! — END block -->

      :) привет парсеру комментариев!
      • 0
        ну логика на уровне ребенка, я не догматик, и не против логики в шабонах как таковой, я против бизнес логики в шаблонах, понимаете разницу?
        • 0
          Я фигею с вашей способности развешивать ярлыки (я про «логику на уровне ребенка» и еще с десяток в этом топике). За сим прекращаю свою аргументацию: поступайте как считаете нужным.
          • 0
            я вам ответил на 2 поста: «ну логика на уровне ребенка» имею виду логику, представленную в шаблоне. Странно, что вы это приняли на свой счет, надеюсь недоразумение после моего пояснения разрешено?
            • 0
              Я ошибся. Приношу извинения
  • 0
    $tpl->compiler_prefs['interpr_i_tate_varname_params'] = true;

    Куда смотрит коммьюнити? :)
    • 0
      а комьюнити еще мало =)
    • 0
      спасибо
    • +1
      вышел релиз, ваше замечание учтено
  • 0
    известные проблемы (имхо) (последняя версия кот видел и использовал 0.4):
    — лицензия только на русском языке
    — нечитаемый и не комментированный код (ожидался phpDoc, говорящие имена переменных)
    но плюсы их легко перевешивают
    • 0
      последняя версия включает в себя лицензию на английском.

      если вам трудно читать оригинал кода (да и мне трудно), то воспользуйтесь любым нормализатором PHP конструкций
      • 0
        >последняя версия включает в себя лицензию на английском.
        license.txt не изменился
    • 0
      Лицензия переведена на английский, phpDoc в планах.
  • 0
    Ура! Молодцы! Следущий шаг — написать язык программирования на Квики!

    Ч0рт, где тут тег айрони?
    • 0
      Если у Вас получится сделать лучше/быстрее — замечательно. Но лично я в этом сильно сомневаюсь.
      • –2
        Конечно не получится, я таким высокоинтеллектуальным онанизмом не страдаю.
        • 0
          хм, ни одного поста, ужасная карма, скверные высказывания — видимо вы вообще от избытка интеллекта не страдаете.
          • 0
            Карма у меня нормальная, а посты… Дык профессия у меня — программист, а не журналист.
          • 0
            поделитесь полезными разработками?
            • +1
              PHP — очень полезная разработка! Выше уже писали, что большинство сайтов и шаблонов к ним делаются программерами, а не конечными пользователями. Таким образом надо просто приучить своих сотрудников грамотно делать шаблоны с PHP вставками. А конечным пользователям вообще лучше не давать свободы действий — обычно это приводит к неприятным последствиям. В крайнем случае можно сделать простейший str_replace скрипт и дать юзерам возможность делать минимальные вставки ( {$VARIABLE} ), циклы foreach, if и case. Именно так сделано в JSTL (либа для Java) и это всех устраивает.
  • +1
    Из огрехов, которые заметил в процессе знакомства:
    1. Невразумительный код с полнейшим отсутствием комментариев. (Лицензия в заголовке — не в счет.)
    2. Отсутствие намека на соблюдение стандартов кодирования (несколько if в одну строку, использование разных табуляций, смешивание разного кода в одну большую… )
    3. не-UTF кириллица в исходниках? О_о
    4. Так же невразумительный ChangeLog («Исправлен мелкий недочет» — что это значит?)

    Идея хорошая, но таким образом вы ее убиваете на корню и развивать ее сами же будете. Единственным числом. Хотя вам не привыкать, как я вижу.
    • –1
      1. Документирование запланировано, правда это не поможет, как метко сказал developer.
      2. Стандарт кодирования у меня собственный. Нету несколько if'ов. Есть короткин if'ы в одну строку. Если не нравится — достаточно воспользоваться нормализатором кода.
      3. Где?

      > Идея хорошая, но таким образом вы ее убиваете на корню и развивать ее сами же будете. Единственным числом. Хотя вам не привыкать, как я вижу.
      Меня это вполне устраивает.
      • 0
        Если вас вполне устраивает то, что я описал — не надейтесь на хоть какое-либо адекватное community. Жаль, что вы так пренебрежительно относитесь к другим разработчикам, которые могут содействовать развитию Вашего проекта, пусть даже это маленький шаблонизатор.
        • 0
          хм. я думаю, что вы говорите о community разработчиков — соавторов, но я б был бы не против видеть community разработчиков — пользователей. Ведь намного важнее штатный функционал, чем сторонние хаки. (это мое ИМХО)
  • –2
    Знаете что я вам скажу на это
    1. Невразумительный код с полнейшим отсутствием комментариев. (Лицензия в заголовке — не в счет.)
    2. Отсутствие намека на соблюдение стандартов кодирования (несколько if в одну строку, использование разных табуляций, смешивание разного кода в одну большую… )
    3. не-UTF кириллица в исходниках? О_о


    еслиб разработчики тратили столько время на изучение и написание новых инструментов, а не на споры о стандартах кодирования, то пользы б было больше. Код читаем (я ж читаю), но есть места сложные: например, регулярки по 7 строк, ну и что? если вы их не в силах понять так и сами провести декомпозицию, то автор хоть переразобъет код как угодно вы ее не поймете.
    кирилица не UTF!!! и что? разве UTF нативная кодировка PHP как в джаве?
    Позвольте, но мне код квики нравится больше чем код смарти.

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

    Конечно, если вы хотите стать соавтором, то поговорите с автором и может вы найдете компромис, а если нет, то к чему эти замечания?
    • +1
      Знаете, есть очень хорошая фраза, несколько из другой оперы конечно, но здесь вполне уместная: «Техника безопасности написана чьей-то кровью». Перефразируя это, можно сказать, что и стандарты кодирования (не самопридуманные, а общеизвестные и применяемые вменяемыми разработчиками), использование UTF, коментирование кода, документация и прочие приятные мелочи придуманы не просто так.

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

      Хотя это личное дело каждого dev'a. Либо следовать стандартам, либо их нарушать и придумывать очередной велосипед.

      Мысль всего сказанного такова — у компонента нет будущего, если он написан «для себя». А для того, чтобы он мог быть использован другими — нужно проявлять толику уважения. Оная, как раз, и кроется в удобстве чтения, коментариях, объяснениях сложных ходов в исходниках, использовании общепринятых стандартов и так далее и тому подобное.
      • 0
        Спасибо, вы лучше всех описали эту мысль. У любого продукта есть много граней восприятия помимо чисто технических (о которых говорю в основном я), в частности то, о чем вы пишите — это другая сторона комплексной оценки продукта и тоже между прочим важная для лояльного отношения к оному. Как человек, который доволен квики могу сказать так: те недостатки которые вы описали имеют место быть, но они частично покрываются энтузиазмом автора (вы можете описать ему свою задачу и, я думаю, получите решение). А второй момент таков: чем больше community тем большее влияние оно оказывает на проект, то есть я думаю, что по мере роста community (на что я надеюсь) проект будет лучше удовлетворять его потребности, в частности станет более общепонятный.
        Ну и в финале: я согласен с вами в целом, но меня квики устраивает как есть. Я покажу ваше сообщение автору и давайте посмотрим на ответ.
  • 0
    Меня напрягают мнения типа «Нативный шаблонизатор всегда быстрее». В каждом нормальном шаблонизаторе есть компилятор, который код типа {TITLE} преобразовывает в, соответственно на выходе получает тот же нативный шаблон.

    Вообще сам использую свой шаблонизатор. Очень простой, ничего лишнего. Делает только то, что мне нужно.
  • 0
    >>поддержка синтаксиса Blitz (опять же по скорости оставляет оригинал позади)
    а давайте вы добавите пруфлинк, либо уберете это громкое, и, судя по всему, ошибочное заявление
    • 0
      bench.limb-project.com/

      можете сделать свои замеры. Конечно сам я не ставил замеров, просто по причине того, что не занимаюсь таким тестированием, но вот сошлюсь на чужие результаты
      • +2
        будьте любезны, где именно в этих тестах quicky быстрее blitz?

        name rps %
        php_one_tpl 2647 100%
        php 2183 82%
        blitz-ctx-arr 1994 75%
        macro_sl_bundled 1736 66%
        blitz 1521 57%
        quicky_one_tpl 1457 56%
        smarty_one_tpl 1389 52%
        macro_sl 1247 47%
        smarty 942 36%
        quicky 839 32%
        macro 768 29%

        korchasa.livejournal.com/3176.html
        это те же результаты, только в жж — похоже сайт лимба лежит сейчас
        • 0
          я в обратном порядке глянул =)
          а можете составить тестирование? я в статью включу, просто сам я на блочные шаблонизаторы не использую
          • 0
            ну спросите у лимбовцев у меня тесты другие немного и квики там нет
            alexeyrybak.com/blitz/lebowski-bench-big.gif
            я пару раз просил автора квики сделать тест в моём формате, но чет не склалось
        • 0
          Гм. Очень интересные результаты :) Очень!
          • –1
            я б сказал противоречивые с моими данными
    • 0
      согласен, доказательств нет, а самому их собирать недосуг.
  • +1
    > третье: Хелперы (функции шаблона).

    Вот какого хрена этого не было в смарти?!!!
    • 0
      В Smarty вообще очень очень много чего нет из того что есть в Quicky.
      Например в Quicky если надо вывести дерево рекурсивно — достаточно сделать элементарный рекурсивный helper прямо в шаблоне.
      • 0
        >В Smarty вообще очень очень много чего нет из того что есть в Quicky.

        Прошу прощения, но в Quicky я не нашёл register_resource. Он не поддерживает этот функционал? Увы, тогда он отпадает. А уж в свете вышеприведённых цифр из тестов… Хотя всё равно ещё сам протестирую как-нибудь…
        • 0
          В Quicky это реализуется несколько иначе (не через жопу). Посмотри _test/wrapper.php
          Есть встроенные addon'ы в plugins/addons, а именно:
          dbtemplate.class.php — болванка для выборки из бд.
          • 0
            Ага, понятно. Тогда вопрос источника отпадает. Но вопрос скорости буду изучать :)
            • 0
              вы изучите пожалуйста и опубликуйте
          • 0
            Вылезает несовместимость по шаблонам. В Smarty ресурсы имели вид «res:path», а с враппером будет «res://path». Понятно, что второй вариант привычнее (у меня в системе даже объекты адресуются как «class://id» в строковом представлении), но лишает возможности простого перехода на сабж.

            Ладно, придётся для тестирования делать отдельный комплект шаблонов :)
        • 0
          memory_cache.class.php — позволяет хранить кеш в shared memory.
          stringtemplate.class.php — реализует механизм передачи текста шаблона из бизнес-логики.
  • 0
    Вышла версия 0.9.6.4
    Между прочим, добавлена возможность хранения кеша в shared memory =)
    • 0
      >Вышла версия 0.9.6.4

      ?

      quicky.keeperweb.com/ru/download
      Текущая версия — 0.4.6.4.
      • 0
        Верно — опечатка.
      • 0
        хм… интересно чтож такого в 0.9 будет??
  • 0
    Отказывается компилироваться шаблон. Ошибки совершенно неинформативные…

    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in /var/www/bal.aviaport.ru/www/cache/system2/smarty-templates_c/common.html.714368.php on line 4

    Файл common.html:
    {include file="xfile://aviaport/_head.html"}
    ...
    <div id="container"> 
    


    Компилируется это в:
    <?php /* Quicky compiler version 0.4.6.4, created  on Tue, 25 Nov 2008 15:41:29 +0300 
                 compiled from  */
    require_once '/home/balancer/work/programming/php/bors-core/engines/smarty/plugins/function.module.php';
     echo 'include' 'file'='xfile://aviaport/_head.html'; ?> 
     
    <div id="container"> 
    ...
    




    Что-то пока не складывается с Quicky :)
    • 0
      А откуда require_once '/home/balancer/work/programming/php/bors-core/engines/smarty/plugins/function.module.php';

      ?
      Что-то ты намутил. Я прогнал тест по 0.9.6.4 — замечательно работает.
      Ты скормил Quicky смартевые плагины?
      • 0
        Всё, понемногу ситуация начинает проясняться.

        Всё дело в очень невнятной обработке ошибок.

        Предыдущая ошибка вызывалась при подключении каталога smarty-плагинов. Но при чём тут тогда
        <?php echo 'include' 'file'='xfile://aviaport/_head.html'; ?>
        ? :)

        Снёс всё, касающееся связки со Smarty. В шаблоне есть, например, вызов плагина {module name="..."}. Модуля теперь нет. Но диагностики этого события тоже нет. Опять ошибка в шаблоне:

        <div id="nav">{module class="nav_top" delim=' / '}</div>


        превращается в

        <div id="nav"><?php echo 'module' 'class'='nav_top' 'delim'=' / '; ?></div>




        Я, кстати, даже догадываюсь из-за чего… Вся подстрока непринуждённо транслируется в PHP без всяких проверок на корректность.

        В общем, рекомендую реализовать хоть какую-то диагностику ошибок компиляции. Иначе пока пользоваться нереально :)
  • +1
    Вышла версия 0.4.6.5
    [+] Добавлен псевдо-компилятор PHP. См. _test/php-template.php
    [~] Исправлены мелкие недочеты.
    • +1
      >Исправлены мелкие недочеты.
      не информативно
  • –2
    Контроллер, точно не должен заниматься форматированием данных, как тут предлагали некоторые сторонники MVC :)

    Вообще-то двухкомпонентный View вполне вписывается в MVC.

    первый уровень — логика представления и делает ее программист, там у нас htmlspecialchars и все if, for

    второй уровень — обычный блочный шаблон, который разберет верстальщик без условных конструкций и прочей ерунды на php.

    Все смарти, квики и т.д. подходят лишь для небольших проектов и желающих усложнить себе жизнь.
    • 0
      > Контроллер, точно не должен заниматься форматированием данных, как тут предлагали некоторые сторонники MVC :)
      Полностью согласен.
      > Все смарти, квики и т.д. подходят лишь для небольших проектов и желающих усложнить себе жизнь.
      Как ты думаешь кто из нас двоих сделал большее количество больших проектов? :)
      Не надо спорить о вкусе устриц с теми кто их ел.
      • –1
        У кого что длинее? Понятия не имею.

        Но зато я прекрасно понимаю, что
        — специализированные решения быстрее универсальных.
        — простые вещи, в большинстве своем, удобнее сложных.

        Что есть уникального и крайне необходимого в квики как шаблонизаторе?
        Возможность вычисления выражений в шаблоне? Извините, но делать это будет не верстальщик, а значит программист и ему PHP вполне подойдет для этих целей.
        Что нужно верстальщику? Только блок информации. Готовый блок, смею заметить.

        А значит все что нужно для верстальщика это обычный, банальный — блочный шаблон. Все. Точка. (вычисления, хелперы и т.д. это не для верстальщика).

        Для логики отображения может потребоваться гораздо большее. Но и заниматься ей будет не верстальщик.
        А значит изобретение очередного синтаксиса шаблона — избыточная затрата времени и сил. Используйте PHP, благо он это позволяет.
        Впрочем это касается любого языка используемого в Web.
    • 0
      p.s. Quicky изначально и писался под один большой нагруженный проект, т.к. Smarty не устроил из-за низкой производительности.
      • +1
        Честно? Работал со Смарти очень мало — слишком он перегруженный.

        Система All-in-one — неплоха для стандартных решений. Тут тебе и шаблонизатор и кеширование.
        Но она однозначно будет уступать «заточенным» вариантам.

        Да и мне почему-то больше нравится код с низкой связностью компонентов, когда я могу заменить практически любую деталь не зацепив смертельно остальные.
  • 0
    Сайт квирки лежит, второй день не могу на него попасть. Печально
  • 0
    все здохло, жаль только поганять руки добрались.
  • 0
    Последняя тут (читать UPD):
    f0.d0.yatv.ru/files/downloads/quicky-0.4.6.6.zip

    А где можно почитать документацию??
  • +1
    Что происходит с официальным сайтом? Он уже несколько дней не доступен.
    • 0
      • 0
        Похожу что этот сайт сломали :(
        Теперь там находится «Деловая информация о предприятиях и товарах России» www.sibregion.ru/
  • 0
    А в чем конкретно выражается «Все шаблоны имеют общую область видимости.»? Предположил что имеется ввиду общая область видимости для всех созданных объектов Quicky. Но опытным путем установлено что это не так, и это хорошо. Общие глобальные переменные так же невидны в шаблонах, и это тоже хорошо. Так в чем тогда выражается этот нюанс «общей области видимости»?
  • 0
    Автору большое спасибо. Будем пробовать.
  • 0
    Ну и как можно связаться с автором этого квики? Я нашел чудовищную ошибку:
    Quicky syntax error Unexpected constant «output_format» in template file:ru/product.html on line 49
    Tag: {$price|string_format:$cur->output_format}

    Как мне с этим быть? На форуме и вообще на сайте царит какой-то хаос.
  • 0
    Вчера неожиданно перестал работать Quicky на одном из проектов, хотя никаких существенных изменений в шаблоны не делал.

    В процессах невидимо запускается WerFault.exe, ничего вразумительного не пишется, в чём же ошибка или недочёт.

    Что делать?
  • 0
    В версии php 5.2.6 работает, в более новой — не работает, вызывает приложение WerFault.exe

    Сделайте, пожалуйста, чтобы работало в более новых версиях php, включая 5.3.3 и выше.
  • 0
    quicky-tpl.net недоступно

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.