Template Toolkit – зло!?
Upcoming SlideShare
Loading in...5
×
 

Template Toolkit – зло!?

on

  • 3,859 views

РИТ++ 2010. Блиц-доклад

РИТ++ 2010. Блиц-доклад

Statistics

Views

Total Views
3,859
Views on SlideShare
3,832
Embed Views
27

Actions

Likes
0
Downloads
14
Comments
7

4 Embeds 27

http://lj-toys.com 12
http://l.lj-toys.com 11
http://www.slideshare.net 3
https://duckduckgo.com 1

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

15 of 7 Post a comment

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Итак, упростил шабон и накидал более менее схожее (задача - забрать из бд и показать страницу со статьёй, тупой get/print):

    #$self->render(template => 'content/content_page', format => 'html', handler=>'tpl');
    TT: 116 r/s

    #$self->render(template => 'content/content_page', format => 'html', handler=>'ep');
    EP: 122 r/s

    $self->render(text => 'This is it') : 155 r/s
    Are you sure you want to
    Your message goes here
    Processing…
  • Хм, я тут покоцал 7к строковый модуль на кусочки и получил speedup для TT в 5,66 раз и в 10,6 для render_text, итого 80 vs 152 req/second. осталось набросать похожий шаблон в Ep и сравнить окончательно.
    Are you sure you want to
    Your message goes here
    Processing…
  • lol, bro, начал посматривать узкие места у MjNCMS, угадай разницу

    #В конце контроллера:
    #$self->render(text => 'This is it');
    $self->render('site_index', format => 'html');#TT2

    вообще никакой, десятые доли
    при
    ab -c 4 -n 100 'http://mojotest:82/justpage.html'
    14.27 requests/sec vs 14.36 r/s avg, а по абсолюту так TT переплюнул text прыгнув разок до 14.51 vs 14.48 (по 6 измерений каждый прогнал)

    Так что узкое место скорее контентный модуль 'всё в одном' на 7к срок (в данном случае) и прочие алгоритмайзы, а TT/EPL - какая нафиг разница, что удобнее тем и рулить :).

    Вообще думал набросать что похожее на сложный TT в epl, с инклудами и etc, но эти результаты отбили всякий интес тратить время на весьма неявную выжимку жалких долей скорости.
    Are you sure you want to
    Your message goes here
    Processing…
  • Any benchmarks?
    Are you sure you want to
    Your message goes here
    Processing…
  • Эх Юра Юра! Из сухого текста презентации ты не понял смысл :) Надо было прямой эфир смотреть))
    Приеду в Минск или Киев и специально для тебя расскажу этот доклад.
    На каждый твой довод есть контр-довод: и про капс, и про греп, и про верстальщиков, и про все остальное. Про скорость я вообще молчу.

    Вкратце шаблонизатор либо простой как CTTP2 и он ни на что не претендует, он тупой, быстрый и любим верстаками, либо шаблонизатор удобен для перловики-верстальщика шаблонов и на нем не получаются монстры и нет убогого макро-языка :)
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />

Template Toolkit – зло!? Template Toolkit – зло!? Presentation Transcript

  • Template Toolkit – зло?! Анатолий Шарифулин
  • Специально для РИТ++ 2010 вышел Perl 5.12!
  • Каждый год на «May Perl»
  • Я рассказываю про «зло» :)
  • CGI «CGI.pm – зло?!», May Perl 2008
  • LWP «Модули Net::*, использующие LWP::UserAgnet – зло?!», May Perl 2009
  • POE Такого блица не было, но это так :)
  • PHP
  • ой :)
  • TT «Template Toolkit – зло?!», May Perl 2010
  • – зло?!
  • – зло?!
  • Есть два типа шаблонизаторов: простые и удобные :)
  • Есть два типа шаблонизаторов: простые
  • Есть два типа шаблонизаторов: простые и удобные :)
  • Удобные: позволяют писать быстро, но заставляют писать не оптимально
  • И из-за этого сложно тестировать логику – всё в шаблонах
  • Да-да, но...
  • Template Toolkit • Cамый популярный шаблонизатор для Perl • Простой, гибкий и многофункциональный • Большое количество плагинов (Filter, Dumper, CGI и даже DBI) • Верстальщик-френдли синтаксис и возможность use Perl :) • Хорошая и полная документация • Портирован на Python – Template-Python
  • Template Toolkit • Cамый популярный шаблонизатор для Perl • Простой, гибкий и многофункциональный • Большое количество плагинов (Filter, Dumper, CGI и даже DBI) • Верстальщик-френдли синтаксис и возможность use Perl :) • Хорошая и полная документация • Портирован на Python – Template-Python
  • Template Toolkit • Cамый популярный шаблонизатор для Perl • Простой, гибкий и многофункциональный • Большое количество плагинов (Filter, Dumper, CGI и даже DBI) • Верстальщик-френдли синтаксис и возможность use Perl :) • Хорошая и полная документация • Портирован на Python – Template-Python
  • Template Toolkit • Cамый популярный шаблонизатор для Perl • Простой, гибкий и многофункциональный • Большое количество плагинов (Filter, Dumper, CGI и даже DBI) • Верстальщик-френдли синтаксис и возможность use Perl :) • Хорошая и полная документация • Портирован на Python – Template-Python
  • Template Toolkit • Cамый популярный шаблонизатор для Perl • Простой, гибкий и многофункциональный • Большое количество плагинов (Filter, Dumper, CGI и даже DBI) • Верстальщик-френдли синтаксис и возможность use Perl :) • Хорошая и полная документация • Портирован на Python – Template-Python
  • Template Toolkit • Cамый популярный шаблонизатор для Perl • Простой, гибкий и многофункциональный • Большое количество плагинов (Filter, Dumper, CGI и даже DBI) • Верстальщик-френдли синтаксис и возможность use Perl :) • Хорошая и полная документация • Портирован на Python – Template-Python
  • [% PROCESS '_design/header.tt' %] <ul> [% FOREACH item = list %] <li>[% item.title %]</li> [% END %] </ul> [% PROCESS '_design/footer.tt' %]
  • Недостатки TT • Очень медленный (на сайте написано «The TT is a fast» :)
  • Недостатки TT • Очень медленный (на сайте написано «The TT is a fast» :) • Тормозят фильтры
  • Недостатки TT • Очень медленный (на сайте написано «The TT is a fast» :) • Тормозят фильтры • Макро-язык TT– зло, еще и капс :)
  • Недостатки TT • Очень медленный (на сайте написано «The TT is a fast» :) • Тормозят фильтры • Макро-язык TT– зло, еще и капс :) • ОО синтаксис вызова методов – not like Perl
  • Недостатки TT • Очень медленный (на сайте написано «The TT is a fast» :) • Тормозят фильтры • Макро-язык TT– зло, еще и капс :) • ОО синтаксис вызова методов – not like Perl • Нет разницы между вызовом метода и ключом хеша
  • Недостатки TT • Очень медленный (на сайте написано «The TT is a fast» :) • Тормозят фильтры • Макро-язык TT– зло, еще и капс :) • ОО синтаксис вызова методов – not like Perl • Нет разницы между вызовом метода и ключом хеша • Сортировка – это пипец, нет map и grep – ааааа
  • Недостатки TT • Нет разницы между строкой и массивом, проверять .size >0
  • Недостатки TT • Нет разницы между строкой и массивом, проверять .size >0 • Нет возможности создавать анонимные структуры, нужно всё именовать
  • Недостатки TT • Нет разницы между строкой и массивом, проверять .size >0 • Нет возможности создавать анонимные структуры, нужно всё именовать • В циклах нет переменной по умолчанию (верните $_)
  • Недостатки TT • Нет разницы между строкой и массивом, проверять .size >0 • Нет возможности создавать анонимные структуры, нужно всё именовать • В циклах нет переменной по умолчанию (верните $_) • Можно использовать $var, $var vs. jQuery – аааааа
  • Недостатки TT • Нет разницы между строкой и массивом, проверять .size >0 • Нет возможности создавать анонимные структуры, нужно всё именовать • В циклах нет переменной по умолчанию (верните $_) • Можно использовать $var, $var vs. jQuery – аааааа • Странное TTL кеширование шаблонов (почему 1 секунда?)
  • Template::Toolkit::Simple A Simple Interface to Template Toolkit
  • Многие вещи не делаются, т.к. иногда лень или долго писать сложный синтаксис
  • Мы привыкли к удобному и красивому Perl :)
  • Существует ли идеальный шаблонизатор?
  • HTML::ChainParser Автор Павел Кудинов Чисто ростовский непередаваемый юмор :)
  • ~~>[ <ul> ~~>list~@@~[ <li>~~>title~</li> ]~ </ul> ]~[ <design> ~~> </design> ]~
  • Mojo::Template EpRenderer Mojolicious. Веб в коробке!
  • % layout 'design'; <ul> % for (@$list) { <li><%= $_->{title} %></li> %} </ul>
  • Сравнение
  • Template::Toolkit Сравнение
  • [% PROCESS '_design/header.tt' %] <ul> [% FOREACH item = list.nsort('id') %] <li>[% item.title %]</li> [% END %] </ul> [% PROCESS '_design/footer.tt' %]
  • [% PROCESS '_design/header.tt' %] <ul> [% FOREACH item = list.mnsort('hash.id') %] <li>[% item.title %]</li> [% END %] </ul> [% PROCESS '_design/footer.tt' %]
  • $Template::Stash::LIST_OPS->{'mnsort'} = sub { ... }; Нужно дописывать функции для сортировок like PHP
  • [% PROCESS '_design/header.tt' %] <ul> [% FOREACH item = list %] <li>[% item.title %] [% my_round(item.count) %]</li> [% END %] </ul> [% PROCESS '_design/footer.tt' %]
  • [% MACRO my_round(count) PERL %] print sprintf "%.0f", $stash->get('count'); [% END %] <ul> [% FOREACH item = list %] <li>[% item.title %] [% my_round(item.count) %]</li> [% END %] </ul>
  • [% USE Util %] <ul> [% FOREACH item = list %] <li>[% item.title %] [% Util.my_round(item.count) %]</li> [% END %] </ul>
  • Иногда получается очень жесткий код на TT :)
  • [% FOREACH l=region.locations %] [% NEXT IF region.metro.location_id==l.location_id %] [% NEXT IF l.room_type == 'prison' %] [% NEXT UNLESS map.show_on_this_dusk_level( l.location_id,person) %] [% IF cut_name.${l.name} %][% cname = cut_name.${l.name} %] [% ELSE %][% cname = l.name %] [% END %] [% IF region.center.location_id == l.location_id %][% macro.0 = {...} %] [% ELSE %] [% macro.$i = {name=>l.name, id=>l.location_id}; i = i+1 %] [% END %] [% END %] [% IF region.metro && region.metro.size > 0 && location.location_id==region.center.location_id && person.dusk_level == 0 %] [% IF cut_name.${region.metro.name} %][% cname = cut_name.${region.metro.name} %]
  • HTML::ChainParser Сравнение
  • ~~>[ <ul> ~~>list~@sort~<D>(id)~@@~[ <li>~~>title~</li> ]~ </ul> ]~[ <design> ~~> </design> ]~
  • ~~>[ <ul> ~~>list~@sort~<D>(hash~id)~@@~[ <li>~~>title~</li> ]~ </ul> ]~[ <design> ~~> </design> ]~
  • ~~>[ <ul> ~~>list~@@~[ <li>~~>title~ ~~>count~&~(PMath~Round)~</li> ]~ </ul> ]~[ <design> ~~> </design> ]~
  • push @ExParser,'Round'; sub MyRound { sprintf("%.0f", ${RSPR $_[0]}); };
  • Иногда получается очень жесткий код :)
  • ~~>#~[:/.design/.lang.iphone]~[ ~~>&~(Public~Video~Main)~main.new~video~[ ~~>%~( ~title~ ~(content~$~(::~LANG)~title~&~(PT~Escape))~ ~content~ ~#[info]~ ~back~ ~(%~( ~title~ ~(..~menu~back)~ ~url~ ~[javascript: history.back();]~ ))~ ~menu~ ~(..~(::~COOKIE~menu~#~[../.menu]))~ )~#~[../.main]~ ]~ ]~
  • Mojo::Template EpRenderer Сравнение
  • % layout 'design'; <ul> % for (sort { $a->{id} <=> $b->{id} } @$list) { <li><%= $_->{title} %></li> %} </ul>
  • % layout 'design'; <ul> % for (@$list) { <li> <%= $_->{title} %> <%= sprintf "%.0f", $_->{count} %> </li> %} </ul>
  • Жесткость кода зависит от упоротости разработчика :)
  • Мои шаблоны на Mojolicious очень простые и красивые! :)
  • Template Toolkit
  • Template Toolkit – зло!
  • Template Toolkit – зло!?
  • use Perl or die;
  • JFDI
  • Спасибо за внимание! Анатолий Шарифулин http://twitter.com/sharifulin