Text::MicroTemplateの速度を簡単にベンチマークでText::MicroTemplateの動作速度を簡単にベンチマークしましたが、今回はメモリ使用量を他のテンプレートエンジンと比較してみました。環境はUbuntu 9.04 amd64, Perl 5.10.0 で、GTopを使って測っています。
useした時のメモリ使用量
独自に作ったスクリプト(use_memory_size.pl)でuse時のメモリ使用量を測ってみます。
$ ./use_memory_size.pl
3.2M : use HTML::Template
11.7M : use HTML::Template::Compiled
2.5M : use HTML::Template::Pro
264k : use Text::MicroTemplate
3.6M : use Template
HTML::Template::Compiledは多くのモジュールで構成されているので、メモリ使用量が多そうな感じです。一方、ソースコードがとてもコンパクトな Text::MicroTemplate は他のテンプレートエンジンと比べてメモリ使用量が一桁少ない。これはすごい。
use_memory_size.pl
#!/usr/bin/env perl
use strict;
use warnings;
for my $module (qw(HTML::Template
HTML::Template::Compiled
HTML::Template::Pro
Text::MicroTemplate
Template)) {
system "gtop.pl 'use $module'";
}
(プロセスのメモリ使用量を調べるために必要なGTopモジュール(およびlibgtop2)をインストールして、下記スクリプトをgtop.plとしてどこかパスの通ってるところに保存しておいてください)
gtop.pl
#!/usr/bin/env perl
use strict;
use warnings;
use GTop;
unless (@ARGV) {
print STDERR "Argument required.n";
exit 1;
}
my $gtop = GTop->new;
my $before = $gtop->proc_mem($$)->size;
eval $ARGV[0];
die $@ if $@;
my $after = $gtop->proc_mem($$)->size;
my $diff = GTop::size_string($after - $before);
print "$diff : $ARGV[0]n";
newしてレンダリングさせた後のメモリ使用量
モジュールをuseした時のメモリ使用量だけでなく、newしてoutputした後のメモリ使用量も調べてみました。結果は以下になります。
$ ./new_memory_size.pl
3.2M : use HTML::Template;my $t = HTML::Template->new(filename => q{template_speed_file.ht});my $s = $t->output;
11.7M : use HTML::Template::Compiled;my $t = HTML::Template::Compiled->new(filename => q{template_speed_file.ht});my $s = $t->output;
2.5M : use HTML::Template::Pro;my $t = HTML::Template::Pro->new(filename => q{template_speed_file.ht});my $s = $t->output;
796k : use Text::MicroTemplate::File;my $t = Text::MicroTemplate::File->new;my $s = $t->render_file(q{template_speed_file.mt})->as_string;;
11.4M : use Template;my $t = Template->new;$t->process(q{template_speed_file.tt}, {}, my $s);
相変わらずText::MicroTemplateは良好な成績ですね。あまりメモリを積んでいないマシンでもこれなら安心して使えそうな感じです。HTML::Template::Proも2.5MBと省メモリですね。スピードも爆速なので、テンプレートにゴリゴリPerlのコードを書く必要がない場合はこれが一番よいかもしれません。
new_memory_size.pl
#!/usr/bin/env perl
use strict;
use warnings;
# HTML::Template
my $ht = <<'...';
use HTML::Template;
my $t = HTML::Template->new(filename => q{template_speed_file.ht});
my $s = $t->output;
...
# HTML::Template::Compiled
my $htc = <<'...';
use HTML::Template::Compiled;
my $t = HTML::Template::Compiled->new(filename => q{template_speed_file.ht});
my $s = $t->output;
...
# HTML::Template::Pro
my $htp = <<'...';
use HTML::Template::Pro;
my $t = HTML::Template::Pro->new(filename => q{template_speed_file.ht});
my $s = $t->output;
...
# Text::MicroTemplate
my $mt = <<'...';
use Text::MicroTemplate::File;
my $t = Text::MicroTemplate::File->new;
my $s = $t->render_file(q{template_speed_file.mt})->as_string;;
...
# Template
my $tt = <<'...';
use Template;
my $t = Template->new;
$t->process(q{template_speed_file.tt}, {}, my $s);
...
for my $code ($ht, $htc, $htp, $mt, $tt) {
$code =~ s/n//g;
system qq{gtop.pl '$code'};
}
[rakuten]book:11995194[/rakuten]