На CPAN-е наконец появился Tenjin — мой текущий любимый шаблонизатор. Надо как-нибудь написать отдельно, почему мне вдруг разонравились шаблонные микроязыки типа HTML::Template или Template::Toolkit (вкратце: я использую их много лет и уже привык не программировать логику в шаблонах. Их польза уже не перевешивает их ограничения. Командам с юными верстальщиками я по-прежнему рекомендую HTML::Template и его старших братьев типа HTML::CTPP2 и HTML::Template::Pro).
Автор CPAN-овского дистрибутива Tenjin — Ido Perlmuter — не является собственно автором пакета (Tenjin написал Makoto Kuwata). Ido кое-что переработал в оригинальном коде, в том числе немножко и интерфейс. Изменение, которое я заметил сразу: для эскейпинга HTML entities используется «стандартный» модуль HTML::Entities, известный в том числе и своей тормознутостью. Вот так выглядит профиль в одном из моих тестов:
(для профайлинга используется Devel::NYTProf, тест основан на Lebowski Bench от Алексея Рыбака и Андрея Шетухина)
Поэтому я сделал маленький бенчмарк для нескольких способов эскейпинга. Привожу ниже результаты, в назидание. Из удивительных результатов: пять сканов по строке пятью отдельными s/// оказываются быстрее, чем один скан с неконстантной заменой.
Маленький текст:
Текст побольше:
В любом случае, HTML::Entities — плохой, медленный модуль для этой функции. Но именно его используют популярные шаблонизаторы и фреймворки, причём, как правило, для обработки маленьких кусочков текста — вставляемых в шаблон значений переменных.
Форкнул Tenjin.
В любом случае, HTML::Entities — плохой, медленный модуль для этой функции. Но именно его используют популярные шаблонизаторы и фреймворки, причём, как правило, для обработки маленьких кусочков текста — вставляемых в шаблон значений переменных.
Форкнул Tenjin.
Recent Comments