XML::Feedベンチの続き

昨日、XML::Feedのベンチマークを取ったのだけど、miyagawaさんに突っ込みもらったので再調査。

XML::FeedはデフォルトではRSSのParseにXML::RSSを使っているらしい。昨日の記事の結果でXMl::FeedとXML::RSSの結果がほとんど同じだった*1のは当然のこと。そしてさらに、XML::FeedはパーサーにXML::RSS以外にもXML::LibXMLが使えるのもわかった。

$XML::Feed::RSS::PREFERRED_PARSER = "XML::RSS::LibXML";

とするとlibxmlが使われるようになる。これは高速化しそうな予感。これも含めて再度ベンチマークをとってみた。

Benchmark: timing 1000 iterations of XML::Feed with XML::RSS, XML::Feed with XML::RSS::LibXML, XML::LibXML, XML::RSS, XML::Simple, regexp...
XML::Feed with XML::RSS: 301 wallclock secs (219.18 usr +  6.94 sys = 226.12 CPU) @  4.42/s (n=1000)
XML::Feed with XML::RSS::LibXML: 61 wallclock secs (46.00 usr +  2.04 sys = 48.04 CPU) @ 20.82/s (n=1000)
XML::LibXML:  8 wallclock secs ( 5.36 usr +  0.45 sys =  5.81 CPU) @ 172.12/s (n=1000)
  XML::RSS: 308 wallclock secs (223.87 usr +  7.09 sys = 230.96 CPU) @  4.33/s (n=1000)
XML::Simple: 57 wallclock secs (40.63 usr +  2.82 sys = 43.45 CPU) @ 23.01/s (n=1000)
    regexp:  0 wallclock secs ( 0.26 usr +  0.01 sys =  0.27 CPU) @ 3703.70/s (n=1000)
            (warning: too few iterations for a reliable count)

ちょい見にくいけど。

XML::Feedでも、XML::RSSを使うと301 wallclockなのに対して、XML::RSS:LibXMLだと61 wallclockとなって5倍のスピードがでているのがわかる。XMl::LibXMLの8 wallclockに比べるとめちゃめちゃ速いわけではないけれど、かなり改善していてこれで問題ない場合も多そうだ。

PlaggerでもXML::FeedのXML::RSS::LibXMLモードが使われているようで、そのあたりも参考にできそう。PlaggerでPerlを学ぶメソッドがここでも有効。FeedParser.pmを参照。

実はXML::Simpleもパーサを選べたりするらしく、もう、夢がひろがりまくり。まさにTIMTOWTDIだわ。

*1:微妙にXML::RSSが速いってのはおかしいけど誤差よね