XML::LibXML 1.67から、使用頻度の高いXPathを適用するさいに前もってコンパイルできる方法が追加された(1.67は使えないので、1.68)。それがXML::LibXML::XPathExpression。同じXPathをコンパイルした場合、しなかった場合、それぞれの比較のベンチマーク結果は以下の通り:
Rate compiled regular
compiled 27322/s -- -11%
regular 30675/s 12% --
約一割か・・・微妙・・・。コードは以下の通り:
use strict;
use Benchmark qw(cmpthese);
use XML::LibXML 1.68;
my $xml = XML::LibXML->new->parse_string(<<EOXML
<foo>
<bar>1</bar>
<bar>2</bar>
</foo>
EOXML
my $xpath = '/foo/bar';
my $compiled_xpath = XML::LibXML::XPathExpression->new($xpath);
cmpthese(100_000, {
compiled => sub {
$xml->findnodes($xpath);
},
regular => sub {
$xml->findnodes($compiled_xpath);
}
});
コメント