Just A Man ([info]simply_a_man) wrote,
@ 2009-08-25 01:49:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
Entry tags:perl

Ужос, нах
Ну я надеюсь, все уже знают, что Template Toolkit - полное безобразие?
Что оно тормозит и провоцирует к переносу к 50% логики приложения в шаблоны?
Вот я это тоже знал всегда, но прочувствовал только сегодня...
Вы понимаете, мы думали, что Bugzilla 3.x по сравнению с 2.x быстрее неописуемо - mod_perl всё-таки, а не CGI, и код более чистый, и ты-ды и ты-пы.
Щазззз.
При выводе бага с большим числом комментов, например наш максимум - 703 коммента, Bugzilla 3.x где-то в 10-15 раз медленнее, чем 2.x. В 10 раз если принудить её использовать хотя бы Template::Stash::XS, в 15 если не принуждать. Несмотря на то, что 2.x - CGI, а 3.x - новая, мод_перл и так далее. О как.
А если попрофилировать, то в top'е сплошной TT.
И Template::Stash - это вообще, имхо, просто идиотизм изначально. Ещё один промежуточный уровень хранения данных - хешей им мало, видишь ли.




(5 comments) - (Post a new comment)


[info]deepone
2009-08-26 12:01 pm UTC (link)
Да, TTk Это наименьшее из доступных нам говен.
глянь в массон.

(Reply to this) (Thread)


[info]simply_a_man
2009-08-26 06:56 pm UTC (link)
А чего глянь-то... Шаблонизатор-то у меня свой есть, весьма шустрый...
Мы ж на ней сидим, на багзилле :)
Там на самом деле такая клёвая вещь была, в коде! Точнее, она даже есть.

http://mxr.mozilla.org/bugzilla/source/Bugzilla/Template.pm
 165 sub quoteUrls {
...
 251     my $bug_word = get_text('term', { term => 'bug' });

http://mxr.mozilla.org/bugzilla/source/Bugzilla/Util.pm
 623 sub get_text {
 624     my ($name, $vars) = @_;
 625     my $template = Bugzilla->template_inner;
 626     $vars ||= {};
 627     $vars->{'message'} = $name;
 628     my $message;
 629     $template->process('global/message.txt.tmpl', $vars, \$message)
 630         || ThrowTemplateError($template->error());
 631     # Remove the indenting that exists in messages.html.tmpl.
 632     $message =~ s/^    //gm;
 633     return $message;
 634 }

А теперь посмотри в шаблон
http://mxr.mozilla.org/bugzilla/source/template/en/default/global/message.txt.tmpl
Он почти ничего не делает, но включает в себя
http://mxr.mozilla.org/bugzilla/source/template/en/default/global/messages.html.tmpl
- 33 килобайта, выполняющиеся при обработке каждого коммента к багу.
Клёво, да? Вот одно это сжирало 10 секунд на 700 комментов :)

(Reply to this) (Parent)(Thread)


[info]deepone
2009-08-26 07:43 pm UTC (link)
Суперцепочку елсифов и кейсов сверни в [% PROCESS "$message_tag" %] и пачку блоков.

(Reply to this) (Parent)(Thread)


[info]simply_a_man
2009-08-26 09:01 pm UTC (link)
кстати, что самое забавное, основное время сжирала не цепочка елсифов, а PROCESS field-descs.none.tmpl - в топе был именно он... любопытно почему, там всего-то пара $stash->set()
в общем я и не разбирался почему, сделал по-другому ))) раз уж get_text('term', ...) используется в коде в одном месте, а все term'ы определяются в отдельном шаблоне, через отдельную функцию получения term'а и сделал.

(Reply to this) (Parent)


[info]simply_a_man
2009-08-26 09:02 pm UTC (link)
но вообще логично, надо именно такой патч сваять и им отправить, мерси :)

(Reply to this) (Parent)


(5 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Log in with OpenID
English • Español • Deutsch • Русский…