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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Template Toolkit – зло!?

3,065

Published on

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

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

7 Comments
0 Likes
Statistics
Notes
  • Итак, упростил шабон и накидал более менее схожее (задача - забрать из бд и показать страницу со статьёй, тупой 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
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Хм, я тут покоцал 7к строковый модуль на кусочки и получил speedup для TT в 5,66 раз и в 10,6 для render_text, итого 80 vs 152 req/second. осталось набросать похожий шаблон в Ep и сравнить окончательно.
       Reply 
    Are you sure you want to  Yes  No
    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, но эти результаты отбили всякий интес тратить время на весьма неявную выжимку жалких долей скорости.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Any benchmarks?
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Эх Юра Юра! Из сухого текста презентации ты не понял смысл :) Надо было прямой эфир смотреть))
    Приеду в Минск или Киев и специально для тебя расскажу этот доклад.
    На каждый твой довод есть контр-довод: и про капс, и про греп, и про верстальщиков, и про все остальное. Про скорость я вообще молчу.

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

No Downloads
Views
Total Views
3,065
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
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

    ×