выбор TemplateEngine

Alexandre

PHPПенсионер
выбор TemplateEngine

есть много Template Engine
Хотелось бы услышать мнение, кто что использует, преимущества и недостатки, в частности интересует производительность.
 

StUV

Rotaredom
Alexandre
самописный враппер для php-native =)

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

whirlwind

TDD infected, paranoid
Я использую смарти но не потому что он хороший или плохой, а потому что он первым попался (ну еще его известность гарантирует работоспособность его кода). ИМХО, для программера не важно какой шаблонозатор. Какой шаблонизатор важно для дизайнера/верстальщика. Важен в плане понятности и наличии документации. Для программера важно что код максимально удален (не столь важно фактически или мнимо) от представления, а это непосредственная задача шаблонизатора. Именно отсюда растут ноги у вопроса - а нафига нам шаблонизатор, если пхп умеет то же самое. Используя границу, определяемую шаблонизатором, проще различить логику контроллера и запчасти представления, а это позволяет писать унифицированные контроллеры, которые могут быть многократно использованы в пределах одного проекта. Так, например у меня, один и тот же контроллер используется как в пользовательском интерфейсе, так и для обработки AJAX запросов. Разница только в шаблонах.

А вопрос о производительности здесь, как и в большинстве случаев, это лишная трата времени там, где это не имеет весомого значения. Лично меня больше интересует производительность в узких местах (например запросы к БД, оптимизация ОРМ) которые могу привести к значительному падению производительности, а не какие то доли секунды, уходящие на работу отлаженного опенсорсного шаблонизатора.
 

StUV

Rotaredom
whirlwind
к сожалению, практика показывает, что в проектах с высокой посещаемостью и большим количеством динамики смарти оказывается "узким местом" =)

а по поводу верстальщиков - очень часто верстальщик == js-программист - в данном случае синтаксис пхп будет более прозрачным...

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

Alexandre
решил устроить пятничный флейм ? - типа "давайте дружно расслабимся в конце рабочей недели" ;)
 

whirlwind

TDD infected, paranoid
>очень часто верстальщик == js-программист

не факт. Если AJAX, то какой верстальщик? Что он нормально отзеркалирует классы модели в объекты JS? Или контроллеры нормальные напишет?

Кстати, шаблонизатор так же способствует организации AJAX, т.к. в этом случае логика JS частично проживает в шаблонах. И еще очень большой "кстать" - AJAX позволит избавиться от шаблонизатора. И никаких вопросов производительности стоять не будет. Для этого достаточно написать простенький шаблонизатор на JS.
 

Vladson

Сильнобухер
"Сложные" (замечу в кавычках) шаблонизаторы не редко являются источниками не слабых тормозов (всякие preg-based типа PHPLib) и даже дыр (конечно не особо критических, но всякое бывает)

По этому я предпочитаю
extract($this->_template_vars)+include
 

Alexandre

PHPПенсионер
Сложные" (замечу в кавычках) шаблонизаторы не редко являются источниками не слабых тормозов
согл.
вот и подыскиваю шаблонизатор для проекта с высокой посещаемостью.

-~{}~ 11.08.06 18:55:

Я использую смарти но не потому что он хороший или плохой, а потому что он первым попался
Да, смарти хороший шаблонизатор, но слишком наворочен и как следствие тормозной.
 

donflash

Вареник клуба
Используй XSLT... Он основан на xml, который как раз набирает обороты...
 

StUV

Rotaredom
whirlwind
Если AJAX, то какой верстальщик? Что он нормально отзеркалирует классы модели в объекты JS? Или контроллеры нормальные напишет?
имелось ввиду абстрактно "верстальщик знает синтаксис яваскрипта и понимает базовые конструкции этого языка"
это не значит, что кто-то дает ему эти яваскрипты писать ;)

AJAX позволит избавиться от шаблонизатора
это пожалуй уже из области религии =)))
 

fisher

накатила суть
Немного инсайда из Yahoo. Я поймал в кулуарах нашей прошлой конференции Расмуса и Андрея и начал задавать им кучу вопросов про то как у них устроен процесс разработки и так далее, в том числе речь шла о шаблонизаторах. Пусть меня поправят, если я неправ, но кажется Андрей имел непоследственное отношение к Смарти, так вот в Yahoo его все равно не используют принципиально - потому что да, действительно, медленно. Их процесс устроен так, что у них есть специализированная система генерации кода и вроде как генерит нативный пхп-код (здесь ре решается проблема мультиязычности), но у них есть отдельный отдел, который только и занимается исключительно интерфейсными делами, эдакие пхп-верстальщики (именно верстальщики - так как насколько я понял Андрея, для них основным условием является блестящие знание и php, и html). Собственно это лишний раз убедило меня в том, что нативный пхп-код это конечно замечательно, но для того, чтобы поддерживать это всё в нормальном состоянии, нужно довольно много ресурсов. К тому же, как только у вас появляется разделение шаблонов (а иначе у вас не получится стройной и удобной системы), у вас появляются инклюды, которые значительно снижают общую скорость исполнения кода.

Так что имхо большую систему на чистом пхп поддерживать крайне сложно, увы. Движка, который бы решал все проблемы большого и нагруженного веб-проекта имхо не существует. Но ближе всего к - native php и php_templates. Возможно, к ним добавится blitz, когда в нём будут вычищены баги и реализованы такие фичи php_templates как контексты (в-общем, контексты уже сделаны, раза в потора работает быстрее чем php_templates - но пока все весьма сырое ;)).
 

StUV

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

по поводу описанной идеи:

фактически верстаются шаблоны "типа смарти", затем фиксируются в проекте как неизменные, потом некоторым (смарти-подобным) образом компилируются в пхп-натив шаблоны и затем только включаются в реальные страницы

я правильно понял тобой выше описанное ?
 

Develar

Новичок
native php
Разве
у вас появляются инклюды, которые значительно снижают общую скорость исполнения кода
это проблема? В моей системе (не претендующей на данный момент на "большого и нагруженного") 2 режима: development и production - в production все файлы (шаблонов, классов) распределяются по пакетам и тем самым решается проблема включения множества файлов.

AJAX позволит избавиться от шаблонизатора
позволит, но только для полноценных приложений (gmail, административные разделы), а не обычных сайтов.
 

fisher

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

-~{}~ 13.08.06 17:09:

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

StUV

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

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

но было бы очень интересно уидеть все это своими глазами...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Для систем без байткод-кеша Smarty за 10 минут ускоряется в 2-3 раза:
1. из ядра вырезаются неиспользуемые (в моих проектах) методы вроде append*, unregister_*, (un)register_[pre|post|output]filter
2. php -w

Когда-нибудь въеду и обрежу fetch() :) может быть. Там половина "для совместимости" imho.

-~{}~ 13.08.06 23:35:

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

whirlwind

TDD infected, paranoid
AJAX позволит избавиться от шаблонизатора
позволит, но только для полноценных приложений (gmail, административные разделы), а не обычных сайтов.
А чем "полноценное приложение" отличается от "обычного сайта" с точки зрения AJAX? Можно навесить какой нить RSS ридер на обычный сайт. С другой стороны, никто не мешает мне засунуть кусок контроллера в виде AJAX на одну из страниц управления, дабы не раздувать исходный контроллер. AJAX - это технология, которая работает на клиента а не на сервер. По этому AJAX-у на масштаб приложения абсолютно пофигу.
 

Alexandre

PHPПенсионер
grigori у меня контентный проект и кеширование смарти съело 3 Гб, хотя оно очень повышает производительнлость.

Имел желание использовать мемкеш, но если отдать 3 Гб из 4-х под кеш - сервер просто умрет. Так что кеширование использовано будет, но свое и будет каой-то конроллер кеша (часть кеша уйдет в мемкеш, часть либо в БД либо в файловую систему.) Опять - если кешем нагружаем БД, то зачем тогда такой кеш.

Как вариант использовать в качестве кеша специализированную БД типа Berkeley DB, скорость выборки которой выше реляционной СУБД.

Идея Фишера, наиболее интерестны - делать предстатическую компиляцию кода. Опять же в Yaxoo - все раскладывается по машинам, а у меня сервер - один.

-~{}~ 14.08.06 11:34:

fisher, я помню твою занятость, но ты говорил, что возможно к лету усовершенствуешь blitz. Сообщи приватом как продвигаются дела?
 
Сверху