Изменения

Перейти к: навигация, поиск

Template Toolkit

590 байтов добавлено, 15:27, 28 августа 2009
Нет описания правки
Изначально Bugzilla вообще не была веб-приложением, а работала на основе библиотеки [[rupedia:Tk|Tk]]. Однако это было давно и неправда и, как и распространённые версии 2.x, так и версии 3.x используют Template Toolkit.
 
==== Bugzilla 2 ====
Bugzilla 2, с точки зрения качества кода, вообще была очень сомнительным поделием, поддерживающим только запуск через CGI и содержащим большое количество старого кода, рассчитанного на то, что недоступны ни транзакции, ни даже библиотека Perl {{CPAN|DBI}}, файлы-вложения хранились в виде BLOB’ов в базе, интерфейс был весьма аскетичен и местами неудобен, и т. д. и т. п. Тем не менее, свои задача Bugzilla 2 выполняла хорошо, и почти никаких проблем с надёжностью не испытывала. Для генерации страниц Bugzilla 2 использует Template Toolkit и, несмотря на CGI, показывает приличную производительность (нет, конечно же не веб-2.0, но для баг-трекера вполне) благодаря относительной простоте кода.
 
==== Bugzilla 3… ====
Bugzilla 3 же показала большой прогресс в области удаления старого кода и написания нового. Появились транзакции, DBI, mod_perl, поддержка UTF-8, более приятный интерфейс, защита от дублирования изменений, для почты стали наконец-то использоваться нормальные (ну, ''такие же'') шаблоны для писем (это с большой оговоркой: если Template Toolkit вообще считать нормальным). Также авторы начали понимать, что Bugzillе совершенно необходимы возможности расширения и постепенно добавляют таковые — в 3.0 появляются Custom Fields (дополнительные поля у багов) и чуть-чуть хуков, в 3.2 настраиваемый жизненный цикл бага, поддержка расширений авторизации и ещё чуть-чуть хуков, и т. п.
Но есть и беда: Bugzilla всё ещё использует Template Toolkit, а разрабатывается длительное время и большим числом людей разной степени вшивости :) в итоге люди начинают использовать ''ну, прямо-таки все'' возможности Template Toolkit’а, что ведёт к уже упомянутому анти-паттерну разработки: перемещению 50 % логики в шаблоны.
 
==== ...И её тормоза ====
Практически это приводит к следующим эффектам. Например, открытие бага с большим числом комментариев (например, с 703-емя — это наш максимум в [[http://www.custis.ru/ ЗИС]]'е) в Bugzilla 2.x, даже с учётом того, что это CGI-скрипт (то есть перезапускается интерпретатор), занимает примерно 1.5 секунды, а в 3.x, даже с учётом того, что это mod_perl (то есть интерпретатор не перезапускается и модули тоже не перезагружаются — ''хочется быстрее, да?'')… примерно 22 секунд, из которых 6 тратятся на работу {{CPAN|Template::Stash}}. После некоторых манипуляций средней хитрости время с 22 сек было доведено до 5.5 секунд, но это всё равно уже никак не 1.5 секунды 2-ой багзиллы, а для дальнейшего прогресса «локальных» улучшений уже мало — нужно глобально менять, так сказать, «архитектурные элементы». Та же история, хоть и менее катастрофическая, с поиском багов — было полсекунды, стало полторы. Некритично, конечно, но где же оно, заявленное «this greatly improves performance and highly decreases the memory footprint»?..
161 sub quoteUrls {
...
247 my $bug_word = get_text('term', { term => 'bug' });
* [http://vmx.yourcmc.ru/var/bugz3-profiling/004-quote-urls-optimize Bugzilla 3.x + оптимизация регэкспов в quoteUrls].
* [http://vmx.yourcmc.ru/var/bugz3-profiling/005-bugzilla3-query '''Неулучшенное''' — поиск багов в Bugzilla 3.x].
 
А ещё отсюда видно, что даже после оптимизации больше всего времени всё равно отъедает TT, и что осуществляется 61282 вызова {{CPAN|Template::Stash::XS}}::get(), съедающих почти секунду времени. Такое количество какбэ намекает на возросшую (во многом бесполезно) сложность шаблонов Bugzilla.
 
Так-то.
== Ссылки ==

Навигация