« Ajaxって何なのさ | メイン | 超魔神英雄伝ワタル »

HTML::Template::Pro

HTML::Template::Pro
HTML::TemplateのXS版。HTML::Templateと比べて、10倍〜25倍早いらしい。mod_perlでも効果あるようだ。

HTML::Template::Pro loads, parse and outputs template on fly,
when you call $tmpl->output(), in one pass. The corresponding code is
written in C and glued to Perl using Perl+XS. As a result,
comparing to HTML::Template in ordinary calls, it runs
10-25 times faster. Comparing to HTML::Template with all caching enabled
under mod_perl, it still 1-3 times faster.


ベンチマーク結果。スクリプトは追記に

$ perl htmltmplpro_bench.pl 
Benchmark: timing 1000 iterations of HTML::Template, HTML::Template::Pro...
HTML::Template: 10 wallclock secs ( 9.43 usr +  0.01 sys =  9.44 CPU) @ 105.93/s (n=1000)
HTML::Template::Pro:  1 wallclock secs ( 1.02 usr +  0.09 sys =  1.11 CPU) @ 900.90/s (n=1000)


確かに10倍弱ぐらいは早い。

#!/usr/bin/perl

use strict;
use HTML::Template;
use HTML::Template::Pro;
use Benchmark;

my $html = <<EOF;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>test</title>
</head>
<body>
<TMPL_LOOP NAME=list><TMPL_IF NAME=key><TMPL_VAR NAME=key>,<TMPL_VAR NAME=value><br></TMPL_IF>
</TMPL_LOOP></body>
</html>
EOF

my @list;
for(my $i=0;$i<30;$i++){
	push(@list,{
		key=>$i,
		value=>rand($i)
	});
}

Benchmark::timethese(1000, {
	'HTML::Template' =>?&htmltmpl,
	'HTML::Template::Pro' => ?&htmltmplpro,
});

sub htmltmpl{
	my $tmpl = HTML::Template->new(
		scalarref => ?$html,
		die_on_bad_params=>0
	);
	$tmpl->param('list',?@list);
	$tmpl->output;
}

sub htmltmplpro{
	my $tmpl = HTML::Template::Pro->new(
		scalarref => ?$html,
		die_on_bad_params=>0
	);
	$tmpl->param('list',?@list);
	$tmpl->output;
}


HTML::TemplateってPure-Perlなので、ポータビリティが高いところがいいのだが、mod_perlが使えなくて、シビアな動作条件がでていて、運良くPure-Perlでないモジュールが使える場合に使えるかな。

トラックバック

この一覧は、次のエントリーを参照しています: HTML::Template::Pro:

» HTML::Template::Proベンチ from おまえのログ
HTML::Template::Proのベンチがblog.nomadscafe.jpで紹介されていたので、コードを拝借して自分の環境(PentiumM1.1GHz,メモリ1GB)でもベンチしてみた。 ... [詳しくはこちら]