Text::MicroTemplateのメモリ使用量をベンチマーク
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 TemplateHTML::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'}; }
こちらもあわせてどうぞ
- Text::MicroTemplate 0.10で速度が速くなっている件
- Text::MicroTemplateの速度を簡単にベンチマーク
- Text::MicroTemplateとHTML::Template::Proの比較
コメント