Template Toolkit – зло!?

  • 2,982 views
Uploaded on

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

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

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • Итак, упростил шабон и накидал более менее схожее (задача - забрать из бд и показать страницу со статьёй, тупой 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
  • Хм, я тут покоцал 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
  • 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
  • Any benchmarks?
    Are you sure you want to
    Your message goes here
  • Эх Юра Юра! Из сухого текста презентации ты не понял смысл :) Надо было прямой эфир смотреть))
    Приеду в Минск или Киев и специально для тебя расскажу этот доклад.
    На каждый твой довод есть контр-довод: и про капс, и про греп, и про верстальщиков, и про все остальное. Про скорость я вообще молчу.

    Вкратце шаблонизатор либо простой как CTTP2 и он ни на что не претендует, он тупой, быстрый и любим верстаками, либо шаблонизатор удобен для перловики-верстальщика шаблонов и на нем не получаются монстры и нет убогого макро-языка :)
    Are you sure you want to
    Your message goes here
    Be the first to like this
No Downloads

Views

Total Views
2,982
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
14
Comments
7
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide








































































Transcript

  • 1. Template Toolkit – зло?! Анатолий Шарифулин
  • 2. Специально для РИТ++ 2010 вышел Perl 5.12!
  • 3. Каждый год на «May Perl»
  • 4. Я рассказываю про «зло» :)
  • 5. CGI «CGI.pm – зло?!», May Perl 2008
  • 6. LWP «Модули Net::*, использующие LWP::UserAgnet – зло?!», May Perl 2009
  • 7. POE Такого блица не было, но это так :)
  • 8. PHP
  • 9. ой :)
  • 10. TT «Template Toolkit – зло?!», May Perl 2010
  • 11. – зло?!
  • 12. – зло?!
  • 13. Есть два типа шаблонизаторов: простые и удобные :)
  • 14. Есть два типа шаблонизаторов: простые
  • 15. Есть два типа шаблонизаторов: простые и удобные :)
  • 16. Удобные: позволяют писать быстро, но заставляют писать не оптимально
  • 17. И из-за этого сложно тестировать логику – всё в шаблонах
  • 18. Да-да, но...
  • 19. Template Toolkit • Cамый популярный шаблонизатор для Perl • Простой, гибкий и многофункциональный • Большое количество плагинов (Filter, Dumper, CGI и даже DBI) • Верстальщик-френдли синтаксис и возможность use Perl :) • Хорошая и полная документация • Портирован на Python – Template-Python
  • 20. Template Toolkit • Cамый популярный шаблонизатор для Perl • Простой, гибкий и многофункциональный • Большое количество плагинов (Filter, Dumper, CGI и даже DBI) • Верстальщик-френдли синтаксис и возможность use Perl :) • Хорошая и полная документация • Портирован на Python – Template-Python
  • 21. Template Toolkit • Cамый популярный шаблонизатор для Perl • Простой, гибкий и многофункциональный • Большое количество плагинов (Filter, Dumper, CGI и даже DBI) • Верстальщик-френдли синтаксис и возможность use Perl :) • Хорошая и полная документация • Портирован на Python – Template-Python
  • 22. Template Toolkit • Cамый популярный шаблонизатор для Perl • Простой, гибкий и многофункциональный • Большое количество плагинов (Filter, Dumper, CGI и даже DBI) • Верстальщик-френдли синтаксис и возможность use Perl :) • Хорошая и полная документация • Портирован на Python – Template-Python
  • 23. Template Toolkit • Cамый популярный шаблонизатор для Perl • Простой, гибкий и многофункциональный • Большое количество плагинов (Filter, Dumper, CGI и даже DBI) • Верстальщик-френдли синтаксис и возможность use Perl :) • Хорошая и полная документация • Портирован на Python – Template-Python
  • 24. Template Toolkit • Cамый популярный шаблонизатор для Perl • Простой, гибкий и многофункциональный • Большое количество плагинов (Filter, Dumper, CGI и даже DBI) • Верстальщик-френдли синтаксис и возможность use Perl :) • Хорошая и полная документация • Портирован на Python – Template-Python
  • 25. [% PROCESS '_design/header.tt' %] <ul> [% FOREACH item = list %] <li>[% item.title %]</li> [% END %] </ul> [% PROCESS '_design/footer.tt' %]
  • 26. Недостатки TT • Очень медленный (на сайте написано «The TT is a fast» :)
  • 27. Недостатки TT • Очень медленный (на сайте написано «The TT is a fast» :) • Тормозят фильтры
  • 28. Недостатки TT • Очень медленный (на сайте написано «The TT is a fast» :) • Тормозят фильтры • Макро-язык TT– зло, еще и капс :)
  • 29. Недостатки TT • Очень медленный (на сайте написано «The TT is a fast» :) • Тормозят фильтры • Макро-язык TT– зло, еще и капс :) • ОО синтаксис вызова методов – not like Perl
  • 30. Недостатки TT • Очень медленный (на сайте написано «The TT is a fast» :) • Тормозят фильтры • Макро-язык TT– зло, еще и капс :) • ОО синтаксис вызова методов – not like Perl • Нет разницы между вызовом метода и ключом хеша
  • 31. Недостатки TT • Очень медленный (на сайте написано «The TT is a fast» :) • Тормозят фильтры • Макро-язык TT– зло, еще и капс :) • ОО синтаксис вызова методов – not like Perl • Нет разницы между вызовом метода и ключом хеша • Сортировка – это пипец, нет map и grep – ааааа
  • 32. Недостатки TT • Нет разницы между строкой и массивом, проверять .size >0
  • 33. Недостатки TT • Нет разницы между строкой и массивом, проверять .size >0 • Нет возможности создавать анонимные структуры, нужно всё именовать
  • 34. Недостатки TT • Нет разницы между строкой и массивом, проверять .size >0 • Нет возможности создавать анонимные структуры, нужно всё именовать • В циклах нет переменной по умолчанию (верните $_)
  • 35. Недостатки TT • Нет разницы между строкой и массивом, проверять .size >0 • Нет возможности создавать анонимные структуры, нужно всё именовать • В циклах нет переменной по умолчанию (верните $_) • Можно использовать $var, $var vs. jQuery – аааааа
  • 36. Недостатки TT • Нет разницы между строкой и массивом, проверять .size >0 • Нет возможности создавать анонимные структуры, нужно всё именовать • В циклах нет переменной по умолчанию (верните $_) • Можно использовать $var, $var vs. jQuery – аааааа • Странное TTL кеширование шаблонов (почему 1 секунда?)
  • 37. Template::Toolkit::Simple A Simple Interface to Template Toolkit
  • 38. Многие вещи не делаются, т.к. иногда лень или долго писать сложный синтаксис
  • 39. Мы привыкли к удобному и красивому Perl :)
  • 40. Существует ли идеальный шаблонизатор?
  • 41. HTML::ChainParser Автор Павел Кудинов Чисто ростовский непередаваемый юмор :)
  • 42. ~~>[ <ul> ~~>list~@@~[ <li>~~>title~</li> ]~ </ul> ]~[ <design> ~~> </design> ]~
  • 43. Mojo::Template EpRenderer Mojolicious. Веб в коробке!
  • 44. % layout 'design'; <ul> % for (@$list) { <li><%= $_->{title} %></li> %} </ul>
  • 45. Сравнение
  • 46. Template::Toolkit Сравнение
  • 47. [% PROCESS '_design/header.tt' %] <ul> [% FOREACH item = list.nsort('id') %] <li>[% item.title %]</li> [% END %] </ul> [% PROCESS '_design/footer.tt' %]
  • 48. [% PROCESS '_design/header.tt' %] <ul> [% FOREACH item = list.mnsort('hash.id') %] <li>[% item.title %]</li> [% END %] </ul> [% PROCESS '_design/footer.tt' %]
  • 49. $Template::Stash::LIST_OPS->{'mnsort'} = sub { ... }; Нужно дописывать функции для сортировок like PHP
  • 50. [% PROCESS '_design/header.tt' %] <ul> [% FOREACH item = list %] <li>[% item.title %] [% my_round(item.count) %]</li> [% END %] </ul> [% PROCESS '_design/footer.tt' %]
  • 51. [% 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>
  • 52. [% USE Util %] <ul> [% FOREACH item = list %] <li>[% item.title %] [% Util.my_round(item.count) %]</li> [% END %] </ul>
  • 53. Иногда получается очень жесткий код на TT :)
  • 54. [% 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} %]
  • 55. HTML::ChainParser Сравнение
  • 56. ~~>[ <ul> ~~>list~@sort~<D>(id)~@@~[ <li>~~>title~</li> ]~ </ul> ]~[ <design> ~~> </design> ]~
  • 57. ~~>[ <ul> ~~>list~@sort~<D>(hash~id)~@@~[ <li>~~>title~</li> ]~ </ul> ]~[ <design> ~~> </design> ]~
  • 58. ~~>[ <ul> ~~>list~@@~[ <li>~~>title~ ~~>count~&~(PMath~Round)~</li> ]~ </ul> ]~[ <design> ~~> </design> ]~
  • 59. push @ExParser,'Round'; sub MyRound { sprintf("%.0f", ${RSPR $_[0]}); };
  • 60. Иногда получается очень жесткий код :)
  • 61. ~~>#~[:/.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]~ ]~ ]~
  • 62. Mojo::Template EpRenderer Сравнение
  • 63. % layout 'design'; <ul> % for (sort { $a->{id} <=> $b->{id} } @$list) { <li><%= $_->{title} %></li> %} </ul>
  • 64. % layout 'design'; <ul> % for (@$list) { <li> <%= $_->{title} %> <%= sprintf "%.0f", $_->{count} %> </li> %} </ul>
  • 65. Жесткость кода зависит от упоротости разработчика :)
  • 66. Мои шаблоны на Mojolicious очень простые и красивые! :)
  • 67. Template Toolkit
  • 68. Template Toolkit – зло!
  • 69. Template Toolkit – зло!?
  • 70. use Perl or die;
  • 71. JFDI
  • 72. Спасибо за внимание! Анатолий Шарифулин http://twitter.com/sharifulin