XML::Simple におけるパーサーの実行速度比較

2009年2月23日
| コメント(0) | トラックバック(0) XML::Simple におけるパーサーの実行速度比較

ソースだけでなくタイトルもパクリですが。
実行結果は環境によって変わるんでしょうか。
それとも、何らかの速度改善が行われたのかもしれません。

参考:XML::Simple におけるパーサーの実行速度比較 - naoyaのはてなダイアリー

Benchmark: running XML::LibXML::SAX, XML::Parser, XML::SAX::Expat, XML::SAX::ExpatXS, XML::SAX::PP for at least 3 CPU seconds...
 XML::LibXML::SAX:  3 wallclock secs ( 3.03 usr +  0.00 sys =  3.03 CPU) @ 20.79/s (n=63)
      XML::Parser:  3 wallclock secs ( 3.11 usr +  0.01 sys =  3.12 CPU) @ 57.30/s (n=179)
  XML::SAX::Expat:  3 wallclock secs ( 3.27 usr +  0.00 sys =  3.27 CPU) @ 18.38/s (n=60)
XML::SAX::ExpatXS:  3 wallclock secs ( 3.30 usr +  0.00 sys =  3.30 CPU) @ 67.33/s (n=222)
     XML::SAX::PP:  3 wallclock secs ( 3.25 usr +  0.00 sys =  3.25 CPU) @  4.00/s (n=13)
 
                    Rate XML::SAX::PP XML::SAX::Expat XML::LibXML::SAX XML::Parser XML::SAX::ExpatXS
XML::SAX::PP      4.00/s           --            -78%             -81%        -93%              -94%
XML::SAX::Expat   18.4/s         360%              --             -12%        -68%              -73%
XML::LibXML::SAX  20.8/s         420%             13%               --        -64%              -69%
XML::Parser       57.3/s        1333%            212%             176%          --              -15%
XML::SAX::ExpatXS 67.3/s        1584%            266%             224%         18%                --

使ったRSSファイルは前回と同じです。

なんともコメントしにくいです。
参考にした記事は、3年前半ほど前のものなので色々と変わっているとも言えるし、Windowsという環境のせいとも言えるし。
まあ、それにしても、XML::Parserが無難に速いことは間違いなさそうですね。

ソースコードは以下のとおり。

ソースコード

use strict;
use warnings;
use Benchmark qw(:all);
use Perl6::Say;
use FileHandle;
use XML::Simple;
use Data::Dumper;
 
my $rss_file = "../satomi.xml";
my $fh = FileHandle->new($rss_file)
    or die "cannot open $rss_file: $!";
local $/; # slurp mode
our $content = $fh->getline;
$fh->close;
 
sub parse {
    my $xml = XML::Simple->new->XMLin($content);
#    say Dumper $xml;
}
 
cmpthese(timethese(0,
{
    'XML::Parser'       => \&with_xml_parser,
    'XML::LibXML::SAX'  => \&with_xml_libxml_sax,
    'XML::SAX::ExpatXS' => \&with_xml_sax_expatxs,
    'XML::SAX::Expat'   => \&with_xml_sax_expat,
    'XML::SAX::PP'      => \&with_xml_sax_pp,
}));
 
sub with_xml_parser {
    $XML::Simple::PREFERRED_PARSER = 'XML::Parser';
    parse();
}
sub with_xml_sax_pp {
    $XML::Simple::PREFERRED_PARSER = 'XML::SAX::PurePerl';
    parse();
}
 
sub with_xml_libxml_sax {
    $XML::Simple::PREFERRED_PARSER = 'XML::LibXML::SAX';
    parse();
}
 
sub with_xml_sax_expatxs {
    $XML::Simple::PREFERRED_PARSER = 'XML::SAX::ExpatXS';
    parse();
}
 
sub with_xml_sax_expat {
    $XML::Simple::PREFERRED_PARSER = 'XML::SAX::Expat';
    parse();
}

トラックバック(0)

このブログ記事に対するトラックバックURL:

コメントする

Google検索

Last.fm

このブログ記事について

このページは、のぶりんが2009年2月23日 23:10に書いたブログ記事です。

ひとつ前のブログ記事は「RSSのパース速度の比較」です。

次のブログ記事は「Atomのパース速度の比較」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.
Powered by Movable Type