Какие мнения о шаблонизаторе Twig ?

pilot911

Новичок
Какие мнения о шаблонизаторе Twig ?

Читаю перевод:

Twig — шаблонизатор для PHP, написанный Armin Ronacher и улучшеный автором фреймворка Symfony, сделанный по стопам Django (который, кстати, черпал идеи из Smarty).

Основные вкусности:
- Быстрая компиляция в php-код (быстрее остальных).
- Режим песочницы с ограничением допустимых конструкций.
- Хороший расширяемый код с API.
- Простой компактный синтаксис.
- Вкусности Django: наследование, блоки и т.д.
- Код покрыт модульными тестами.
- Полностью документирован (и API тоже).
- Внятные сообщения об ошибках.


Синтаксис такой:

{{ foo.bar }}
{{ foo['bar'] }}


{% for user in users %}
...
{% endfor %}


{% block head %}
<link rel="stylesheet" href="style.css" />
<title>{% block title %}{% endblock %} - My Webpage</title>
{% endblock %}


{% extends "layout/default.html" %}


{% if 1 < foo < 4 %}foo is between 1 and 4{% endif %}


Кроме того, поддерживает фильтры, математические функции и плагины ( http://wiki.github.com/vito/chyrp/twig-reference )



По скорости в 4 раза быстрее смарти. Интересно, стоит ли его использовать вместо среднефункционального Blitz ?


ПС. Нашел сравнение по скорости


Library Time (sec) Memory (Ko) Templates rendered per second
Twig 3 1,190 3,333
PHPTAL 3.8 2,100 2,632
Dwoo 6.9 1,870 1,449
Smarty 2 12.9 2,350 775
Smarty 3 14.9 3,230 671
Calypso 34.3 620 292
eZ Templates 53 5,850 189


I benchmarked a template that includes a simple template (one output and a for loop on three items) and decorated with a simple layout. The times are for the average of ten runs; a run consisting of one compilation of the template and 10,000 rendering of it. For engines that do not support inheritance, I have used a header and a footer instead, and for engines that do not support automatic output escaping, escaping has been done by hand.


http://fabien.potencier.org/article/34/templating-engines-in-php

-~{}~ 25.10.09 07:09:

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


Twig:

PHP:
require_once 'twig/Autoloader.php';
Twig_Autoloader::register();


$loader = new Twig_Loader_String('path_to_cache', false);
$twig = new Twig_Environment($loader);

$template = $twig->loadTemplate('Hello {{ name }}!');

$template->display(array('name' => 'Fabien'));

Blitz:

PHP:
$body = <<<BODY
hello, {{\$name}}!
BODY;

$Template = new Blitz();
$Template->load($body);
$Template->set(array('name' => 'Fabien'));
echo $Template->parse();
 

pilot911

Новичок
засомневался в Blitz'e, поскольку не каждый пользователь сможет скомпилировать либу и подключить к пхп

поэтому решил поискать аналог с совместимым синтаксисом, кандидат пока один - Twig, хотя мб проще написать свой шаблонизатор под те 15 функций Блица, но что-то никак не соображу способ заполнения вложенных блоков
 

fisher

накатила суть
Re: Какие мнения о шаблонизаторе Twig ?

я конечно диггер но не могу пройти мимо
Автор оригинала: pilot911

Blitz:

PHP:
$body = <<<BODY
hello, {{\$name}}!
BODY;

$Template = new Blitz();
$Template->load($body);
$Template->set(array('name' => 'Fabien'));
echo $Template->parse();
есть метод display

PHP:
$body = <<<BODY
hello, {{\$name}}!
BODY;

$Template = new Blitz();
$Template->load($body);
$Template->display(array('name' => 'Fabien'));
 

pilot911

Новичок
с метками понятно, вопрос был о вложенных ->block()


в общем, раз тема поднята - потестировал Twig, он оказался медленнее Blitz в 20 раз на простых метках.. так что, вывод очевиден


ПС. Фишер, можно надеяться, что баг с IF и hasContext() будет исправлен ?
 

Long

Новичок
раз у тема все равно поднята спрошу - какой смысл мерить скорость компиляции, которая происходит по факту 1 раз, если в большинстве шаблонизаторов есть кеширование?
 

pilot911

Новичок
Автор оригинала: Long
раз у тема все равно поднята спрошу - какой смысл мерить скорость компиляции, которая происходит по факту 1 раз, если в большинстве шаблонизаторов есть кеширование?
измерялось с кэшированием
 

Long

Новичок
может я конечно что-то упустил, но единственное место в статье, по которому можно судить о включенном или выключенном кешировании это название колонки "Templates rendered per second". т.е. мерилась скорость только рендеринга шаблонов. на мой взгляд - рендеринг это скорей без включения кеша.
 

fisher

накатила суть
>>Фишер, можно надеяться, что баг с IF и hasContext() будет исправлен ?
можно
 

Alexandre

PHPПенсионер
хотя мб проще написать свой шаблонизатор под те 15 функций Блица, но что-то никак не соображу способ заполнения вложенных блоков
WP написал квикли, который имел синтатсис смарти,а потом под заказ реализовал синтаксис блица.
после того, как он кинул пару клиентов, WP стал сейчас обитать на Хабре, ник не знаю, но его можно вычислить по проектам: PHPDaemon, PHP-MEMCACHE, квики, smartDB

что касается скорости, то квики быстрее смарти, и автор даже утверждает, что за счет кеширования в памяти и опкода сопоставимо с блитцем

в общем, раз тема поднята - потестировал Twig, он оказался медленнее Blitz в 20 раз на простых метках.. так что, вывод очевиден
а ты сомневался????
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Twig о*уеннен, я считаю. Внезапно, некоторое время назад перешел на него.
 

pilot911

Новичок
Автор оригинала: Alexandre
а ты сомневался????
в квике нет поддержки, например, hasContext() - это его большой минус

а насчет сомневался ли я в скорости твига - автор сделал хороший маркетинг, расписал все красиво про кэширование в нативный пхп.. ну как тут не засомневаться ? :)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: pilot911
а насчет сомневался ли я в скорости твига - автор сделал хороший маркетинг, расписал все красиво про кэширование в нативный пхп.. ну как тут не засомневаться ? :)
Ваще-то, любой вменяемый движок щас кэширует результаты компиляции шаблона, поэтому смысла сравнивать скорость компиляции смысла нету --- Long об этом уже сказал. А я ещё добавлю: сравнивать скорость работы стоит на реальных шаблонах --- штук 5-10 разных файлов, десятков несколько блоков, но при этом не более нескольких сотен итераций.

Потому что тот же Блиц легко выиграет за счёт маленьких накладных расходов на свой запуск при обработке шаблона типа "один блок, 10 итераций". Кто-то опять же выиграет при обработке шаблона "1 блок, 10000 итераций". Но проблема в том, что таких шаблонов (особенно варианта с 10000 итераций) в дикой природе обычно не встречается.
 

Krishna

Продался Java
Блин, имхо, современный шаблонизатор должен юзать XML-ную разметку, хотя бы ради того, хотя бы, чтобы его понимали редакторы, была возможность фолдинга, автодополнения.
Именно поэтому юзаю лимбовский Wact (без самого лимба)
 

Alexandre

PHPПенсионер
Блин, имхо, современный шаблонизатор должен юзать XML-ную разметку, хотя бы ради того, хотя бы, чтобы его понимали редакторы,
тогда XSLT для твоих целей - самый удобный

думаю, что смена {{ на < или {$ не принциальна, а посему что смарти, что XSLT, что блитц - одна колбаса.

Говоря о скоростном блитце - при использовании хелперов - вся его скорость уходит на нет.
тоже самое отностится и к cttp

я так для себя еще до конца и не уяснил, каким должен быть "идеальный шаблонизатор"
 

pilot911

Новичок
Автор оригинала: Alexandre
тогда XSLT для твоих целей - самый удобный

думаю, что смена {{ на < или {$ не принциальна, а посему что смарти, что XSLT, что блитц - одна колбаса.

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

Alexandre

PHPПенсионер
хелперы там используются оч редко, к тому же, я уверен, что со временем будет расти функциональность, всякие IF, циклы c условиями, об-но должны появиться
оно идеалогически не появится, по тому что автор против превращения шаблонизатора в еще один язык программирования, как это стало со смарти. По этому и появились хелперы.

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


Эх, было у меня еще два года назад желание изобрести еще один велосипед... А, иногда оглядываясь назад смотришь: "А кому оно все нужно, если начальство тебя не поддерживает, так что буду использовать то, что есть..."
 

pilot911

Новичок
ну почему не появится? ведь необходимость в этом есть - иначе бы всякие хелперы не были бы нужны
 

Alexandre

PHPПенсионер
pilot911
мы оффтопим, но если ты хочешь и можешь развивать блиц, то думаю, что Алексей Рыбак будет не против. А, пока кроме него самого и fixxxer-а, который его постоянно патчит под свои нужды заниматься этим проектом некому.
 
Сверху