CatalystでXslateしてみた

cpanm Text::Xslate
cpanm Text::Xslate::Bridge::TT2Like
cpanm Catalyst::View::Xslate

MyApp::View::Xslate

package MyApp::View::Xslate;
use Moose;
extends 'Catalyst::View::Xslate';

has '+module' => (
    default => sub { [ 'Text::Xslate::Bridge::TT2Like' ] }
);

has '+template_extension' => (
    default => '.tt',
);

has '+cache_dir' => (
    default => '/tmp/MyApp/.xslate_cache',
);

has '+cache' => (
    default => '1',
);

has '+syntax' => (
    default => 'TTerse',
);

1;

MyApp::Controller::Root;

package MyApp::Controller::Root;
....
sub end : Private {
    my ( $self, $c ) = @_;
    $c->forward('MyApp::View::Xslate');
}

てな感じであっさりと動いた。 テンプレート側の変更は[% INCLUDE hogehoge.tt %]は[% INCLUDE "hogehoge.tt" %]とかぐらいでした。
1回目の表示はコンパイルされてないので遅い、2回目以降速くなる。

ベンチマーク

サーバはcatalyst_server

[% %]をほとんど使ってないページ
  • Template::Toolkit(Catalyst::View::TT)
    • Requests per second: 16.61 [#/sec] (mean)
  • Text::Xslate(Catalyst::View::Xslate)
    • Requests per second: 19.67 [#/sec] (mean)
FOREACH がたくさんあったりいろいろ複雑なページ
  • Template::Toolkit(Catalyst::View::TT)
    • Requests per second: 2.03 [#/sec] (mean)
  • Text::Xslate(Catalyst::View::Xslate)
    • Requests per second: 6.26 [#/sec] (mean)

おおおテラはやす! ってことでTTはもうさようならです。 今までありがとう!